方案说明(构造)



有人可以解释一下为什么:

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

相关内容

  • 没有找到相关文章

最新更新