0

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

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

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

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

这似乎很愚蠢,因为 pair 只包含两个元素。

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

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

谢谢!

4

2 回答 2

5

CONS 构造一对。一对二的东西。它写为(firstthing . secondthing)

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

由于cons构造了一个 cons,结果(cons 1 2)(1 . 2)

(cadr (cons 1 2))是一个错误。它是(car (cdr (cons 1 2))(cdr (cons 1 2)2。现在(car 2)错了。你不能坐的。是一个数字,而不是一个缺点。22

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

于 2012-11-15T08:14:05.880 回答
0

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

例如,列表

(1 2 3)

以这种形式记忆:

(1 . (2 . (3 . ())))
于 2012-11-15T08:12:29.007 回答