Scheme 方案说明(施工)

Scheme 方案说明(施工),scheme,elements,cons,Scheme,Elements,Cons,有人能解释一下为什么: (define a (lambda() (cons a #f))) (car (a)) ==> procedure ((car (a))) ==> (procedure . #f) 我想我不明白。谢谢定义从顶层定义全局变量a 匿名过程(lambda()(cons a#f)在调用时,将a和#f的求值组合成一对 当你计算a时,你会得到一个过程。在我的系统中,你会得到 当您评估(a)时,您会得到(#.#f)。现在过程的显示方式高度依赖于实现。没有标准,但许多人

有人能解释一下为什么:

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

(car (a)) ==> procedure

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

我想我不明白。谢谢

定义
从顶层定义全局变量
a

匿名过程
(lambda()(cons a#f)
在调用时,将
a
#f
的求值组合成一对

当你计算
a
时,你会得到一个过程。在我的系统中,你会得到

当您评估
(a)
时,您会得到
(#.#f)
。现在过程的显示方式高度依赖于实现。没有标准,但许多人会使用一种约定,即名称
a
会出现,但不要指望它

由于
a
也可以作为调用
a
的结果的
car
访问,因此您可以
((car(a))
并获得与
(a)
相同的结果。这是因为
(eq?a(car(a))
\t

(define a (lambda() (cons a #f)))
定义一个过程,
a
,调用该过程时将返回该对

(<the procedure a> . #f)
是在没有参数的情况下调用过程
a
,也就是说,根据上述
a
的定义

(<the procedure a> . #f)
(因为它的意思是“调用
汽车
,结果是评估
(a)

当您添加另一对括号时

((car (a)))
您正在调用该过程,因为它是过程
a
,所以返回与
(a)
相同的结果

(.#f)

我相信如果你看一下
(a)
的值,并将其与
((car(a))
进行比较,它会变得更清晰一点。我不理解(car(a))。它与(car(a)())是一样的。不,那是胡说八道。
car
接受一个参数,而不是两个。你是真的,但“car”从一个“cons”中选择一个(cons)…还是不?(car(cons 1 2))。在我的例子中,我有(车(a))。这是我无法理解的。我不理解你不理解的是什么。你希望
(车(a))
((车(a)))
是什么?(在
(车(a))
(a)
不是列表
(cons a'())
-或
(列表a)
-这是一个过程调用。)
(car (a))
((car (a)))
 (<the procedure a> . #f)