今天也看了一段,lisp之根源,有个问题?
反之一个被引用的表仅被视为表, 在此例中就是有两个元素的表:
> (atom '(atom 'a))
()
这里的意思是说,把`(atom)`当作一个token看待
但在下面的一个实例中
> ((lambda (f) (f '(b c)))
'(lambda (x) (cons 'a x)))
(a b c)
系统为什么不把红色的部分当作一个整体?
而是把整个的二行传给f
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
是 yum
redhat 系的好久没用了。应该能用 rpm 之类的在线安装吧。
谢谢win_hate版主的回答
也谢谢chenzengjie
我继续看书
xdshting就是我,不好意思,马甲拆穿了
另外想问一个问题:在fc9中是不是自带了clisp
[root@localhost ~]# locate clisp
/usr/share/a2ps/sheets/clisp.ssh
/usr/share/swig/1.3.33/clisp
/usr/share/swig/1.3.33/clisp/clisp.swg
这是我机器的输出,怎么用阿,还是要自己去下载一个?
[ 本帖最后由 我是害虫 于 2008-12-9 11:17 编辑 ]
lisp 中的列表跟 scheme 中的不同。可以参考下面的连接:
http://bbs.chinaunix.net/thread-1275170-1-3.html
我猜那个文章用的是 arc,就是作者自己的 lisp 方言。
>> 2,在请教一下,另一个问题,以您刚才测试程序为例
>> [1]> ((lambda (f) (funcall f '(b c)))
>> (lambda (x) (cons 'a x)))
>> (A B C)
>> [2]>
>> the roots of lisp中说,对((lambda (p1 p2 ......pn)e)a1,a2......an)来说,先求ai的值,
>> 在这个例子中来说,就是先求(lambda (x) (cons 'a x))的值,这个知怎么求阿?
>> 我是把f替换成(lambda (x) (cons 'a x))来理解的,可是不明白为什么
对 (lambda (x) (cons 'a x)) 求值就得到了一个匿名函数。
>> 3,`(atom `a) 当作一个表
>> 请您说一下表的定义
列表是递归定义的
NIL 是列表
如果 L 是列表,则 (cons foo L) 也是列表。
列表也可以用 List 函数生成。
我用 gcl 试了一下,下面两个代码都是可以的
复制代码
但在 clisp 和 elisp 中就只支持后者。看来是不同版本的 funcall 定义不同。
[ 本帖最后由 win_hate 于 2008-12-9 00:16 编辑 ]
我的理解
列表的定义是这样:列表要么是个nil; 要么是个pair, 这个pair的cdr是列表.
pair是什么? 一对指针. 前面的指向一个对象,叫这个pair的car;后面的指向一个对象, 叫这个pair的cdr.
一个car是符号lambda的列表很特殊. 它代表一个函数. 记住在lisp里函数也是对象, 象数据一样被处理.
分析一下你的例子:
((lambda (f) (funcall f '(b c)))
(lambda (x) (cons 'a x)))
(lambda (f)
(funcall f '(b c)))
这是个函数, 有一个参数f. 它所做就是用'(b c) 来调用(funcall)参数f. 由此看来参数f要求是一个函数对象.
再看你例子中这个表达式的其它部分: (lambda (x) (cons 'a x))
这定义了一个函数对蟓. 此函数只有一个参数. 所做就是在参数x前加了个'a构建了(cons)一个pair.
多思考思考.
先谢谢斑竹
1,这个例子我没运行,在论坛看了一些帖子,感觉挺有意思,所以,我今天第一次看lisp,看得实the roots of lisp
> ((lambda (f) (f '(b c)))
'(lambda (x) (cons 'a x)))
(a b c)
这段代码,是在the roots of lisp中拷贝下来的
2,在请教一下,另一个问题,以您刚才测试程序为例
[1]> ((lambda (f) (funcall f '(b c)))
(lambda (x) (cons 'a x)))
(A B C)
[2]>
the roots of lisp中说,对((lambda (p1 p2 ......pn)e)a1,a2......an)来说,先求ai的值,
在这个例子中来说,就是先求(lambda (x) (cons 'a x))的值,这个知怎么求阿?
我是把f替换成(lambda (x) (cons 'a x))来理解的,可是不明白为什么
3,`(atom `a) 当作一个表
请您说一下表的定义
在次谢谢你
[ 本帖最后由 xdshting 于 2008-12-8 22:47 编辑 ]
>> 这里的意思是说,把`(atom)`当作一个token看待
应该是把 `(atom `a) 当作一个表,所以 (atom `(atom `a)) 的结果才是 () 也就是 NIL
另一个我跑你的代码出错。你用的什么环境?
'(lambda (x) (cons 'a x)) 是一个被 quote 的表。
我用 clisp,只会用 funcall 调用函数
复制代码
[ 本帖最后由 win_hate 于 2008-12-8 21:41 编辑 ]