Lisp Scheme如果对以空格字符结尾,结果将在两个元素之间有一个点

Lisp Scheme如果对以空格字符结尾,结果将在两个元素之间有一个点,lisp,scheme,sicp,Lisp,Scheme,Sicp,如果配对以空格字符结尾, 为什么结果值包含一个点(.)? 这个点(.)是什么意思 这一个看起来很愚蠢,因为这一对只包含两个元素 我只是想知道为什么第一个表达式会在结果中回显一个点 (cadr (cons 1 2 )) ;The object 2, passed as an argument to safe-car, is not a pair. ;To continue, call RESTART with an option number: ; (RESTART 1) => Return

如果配对以空格字符结尾, 为什么结果值包含一个点(.)? 这个点(.)是什么意思

这一个看起来很愚蠢,因为这一对只包含两个元素

我只是想知道为什么第一个表达式会在结果中回显一个点

(cadr (cons 1 2 ))
;The object 2, passed as an argument to safe-car, is not a pair.
;To continue, call RESTART with an option number:
; (RESTART 1) => Return to read-eval-print level 1.
谢谢

点不是结果的“元素”,它是Scheme存储列表的方式,即作为串联对

例如,列表

(1 2 3)
以这种形式记忆:

(1 . (2 . (3 . ())))
点不是结果的“元素”,它是Scheme存储列表的方式,即作为串联对

例如,列表

(1 2 3)
以这种形式记忆:

(1 . (2 . (3 . ())))

CONS构造了一对。一对两样东西。它写为
(firstthing.secondthing)

如果第二件事是一个空列表,它将被写为
(第一件事)
。它与
(第一件事()
相同

由于
cons
构造了一个cons,因此
(cons12)
的结果是
(1.2)

(cadr(cons 1 2))
是一个错误。它是
(car(cdr(cons12))
(cdr(cons12)是
2
。现在
(car 2)
是错误的。你不能乘坐
2
的车是一个数字,而不是一个cons


如果要创建由cons单元格或空列表组成的列表,请使用函数
list

cons构造一对。一对两件事。它写为
(第一件事。第二件事)

如果第二件事是一个空列表,它被写为
(firstthing)
。它与
(firstthing.()
相同

由于
cons
构造了一个cons,因此
(cons12)
的结果是
(1.2)

(cadr(cons 1 2))
是一个错误。它是
(car(cdr(cons 1 2))
(cdr(cons 1 2)
2
。现在
(car 2)
是一个数字,而不是一个cons>


如果要创建由cons单元格或空列表组成的列表,请使用函数
list

这不准确,Scheme或任何其他lisp都不会记住点!它打印点来表示cons,通常是
cdr
不为空的cons或其他cons,但可以在您的实现中配置n、 Scheme或任何其他lisp都不准确,它不记住点!它打印点来表示conses,通常conses的
cdr
不为null或其他cons,但这可能在您的实现中是可配置的。@ray:两件事的一对。它写为(第一件事。第二件事).这就是定义。这就是它存在的原因。它可以用不同的方式书写,但在恐龙在这个星球上行走之前,Lisp就是这样定义的。-)对不起,我刚开始学习SICP,现在我终于知道点只是表示缺点的一种方式。不管怎样,非常感谢。@ray:两件事。它写为(第一件事。第二件事)。这就是它的定义。这就是它存在的原因。它可以写得不同,但在恐龙在这个星球上行走之前,Lisp就是这样定义的对不起,我刚开始学习SICP,现在我终于知道点只是表示cons的一种方式。不管怎样,非常感谢。它与空格字符无关。
(cons12)
(cons12)
相同。
(cons12)
与空格字符无关。
(cons12)
(cons12)
相同