我正在读一本叫做小阴谋家的书。
在阅读之前,我已经阅读了 SICP 的前三章。
我的问题是为什么 cons 的第二个参数必须是 list。
但是,(cons a b)
适用于所有值 a 和 b 和
(car (cons a b))
=一个
(cdr (cons a b))
= b
我正在读一本叫做小阴谋家的书。
在阅读之前,我已经阅读了 SICP 的前三章。
我的问题是为什么 cons 的第二个参数必须是 list。
但是,(cons a b)
适用于所有值 a 和 b 和
(car (cons a b))
=一个
(cdr (cons a b))
= b
to 的第二个参数cons
不一定是一个列表。仅当您正在构建列表(正确或其他方式)时,它才是列表。如果单元格的cdr
一部分cons
不是列表,则完全有效,例如,在构建关联列表时:
(define lookup-table (list (cons 'x 10) (cons 'y 20) (cons 'z 30)))
(assoc 'z lookup-table)
=> '(z . 30)
并非所有 Lisp 实现都允许非列表作为 cons 的第二个参数。例如,请参阅https://scheme.cs61a.org/