有人可以解释一下为什么:
(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。