有人可以解释一下为什么:
(define a (lambda() (cons a #f)))
(car (a)) ==> procedure
((car (a))) ==> (procedure . #f)
我想我不明白。谢谢
这个
(define a (lambda() (cons a #f)))
定义一个过程,a
,调用时将返回对
(<the procedure a> . #f)
即谁car
是程序本身,谁的cdr
是#f
.
换句话说,评估的结果
(a)
是调用过程的结果 a
没有参数,根据上述a
的定义,
(<the procedure a> . #f)
因此
(car (a))
是<the procedure a>
(因为它表示"使用评估结果调用car
(a)
")
添加另一对括号时
((car (a)))
您正在调用该过程,由于它是a
的过程,因此返回与(a)
相同的结果,
(<the procedure a> . #f)
顶层的define
定义了一个全局变量a
。
匿名程序(lambda() (cons a #f)
,当调用时,从a
和#f
的评估中产生一对。
当您评估a
时,您将获得一个程序。在我的系统中,你会得到#<procedure:a>
.
当你评估(a)
时,你会得到(#<procedure:a> . #f)
。现在,过程的显示方式高度依赖于实现。没有标准,但许多人会使用一个a
名称会出现的会议,但不要指望它。
由于a
也可以作为调用a
结果的car
进行访问,因此您可以((car (a)))
并获得与(a)
相同的结果。那是因为(eq? a (car (a)))
#t
.