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)
相同