【问题标题】:why second argument to cons must be a list为什么 cons 的第二个参数必须是一个列表
【发布时间】:2012-11-26 14:07:18
【问题描述】:

我正在读一本名为小阴谋家的书。

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

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

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

(car (cons a b)) = 一个

(cdr (cons a b)) = b

【问题讨论】:

  • 这只是一个 Scheme/Lisp 约定,列表要么是 nil,要么是 cons,而 cdr 又是一个列表。

标签: scheme the-little-schemer


【解决方案1】:

cons 的第二个参数不一定是一个列表。它是一个列表,如果您正在构建一个列表(无论是否正确)。如果cons 单元格的cdr 部分不是列表,则完全有效,例如,在构建关联列表时:

(define lookup-table (list (cons 'x 10) (cons 'y 20) (cons 'z 30)))
(assoc 'z lookup-table)
=> '(z . 30)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 2019-04-04
      • 2019-09-21
      • 1970-01-01
      相关资源
      最近更新 更多