4

我正在读一本叫做小阴谋家的书。

在阅读之前,我已经阅读了 SICP 的前三章

我的问题是为什么 cons 的第二个参数必须是 list

但是,(cons a b)适用于所有值 a 和 b 和

(car (cons a b))=一个

(cdr (cons a b))= b

4

2 回答 2

4

to 的第二个参数cons不一定一个列表。当您正在构建列表(正确或其他方式)时,它才是列表。如果单元格的cdr一部分cons不是列表,则完全有效,例如,在构建关联列表时:

(define lookup-table (list (cons 'x 10) (cons 'y 20) (cons 'z 30)))
(assoc 'z lookup-table)
=> '(z . 30)
于 2012-11-26T14:23:55.267 回答
1

并非所有 Lisp 实现都允许非列表作为 cons 的第二个参数。例如,请参阅https://scheme.cs61a.org/

于 2019-07-15T11:46:00.107 回答