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

时间:2012-11-15 08:07:57

标签: lisp scheme sicp

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

(cons 1 2 )
;Value 2: (1 . 2)

(car (cons 1 2 ))
;Value: 1

(cdr (cons 1 2 ))
;Value: 2
这个似乎很愚蠢,因为对只包含两个元素。

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

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

谢谢!

2 个答案:

答案 0 :(得分:5)

CONS构造一对。一对两件事。它写成(firstthing . secondthing)

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

由于cons构建了一个缺点,(cons 1 2)的结果为(1 . 2)

(cadr (cons 1 2))是一个错误。它是(car (cdr (cons 1 2))(cdr (cons 1 2)2。现在(car 2)错了。你无法接受2汽车2是一个数字,而不是缺点。

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

答案 1 :(得分:0)

点不是结果的“元素”,它是Scheme记忆列表的方式,即作为连接对。

例如,列表

(1 2 3)

以这种形式记忆:

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