方案说明(构造)

时间:2014-12-15 09:31:00

标签: scheme elements cons

有人可以解释一下原因:

(define a (lambda() (cons a #f)))

(car (a)) ==> procedure

((car (a))) ==> (procedure . #f)

我不认为我明白了。感谢

2 个答案:

答案 0 :(得分:2)

(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)

答案 1 :(得分:1)

顶级的

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