有人可以解释一下为什么:
(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
也可以作为car
调用结果访问,因此a
您可以((car (a)))
得到与 相同的结果(a)
。那是因为(eq? a (car (a)))
是#t
。