如果对以空格字符结尾, 为什么结果值包含一个点(。)? 这个点(。)是什么意思?
(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.
谢谢!
答案 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 . ())))