首页 > 解决方案 > 这是给定嵌套结构 [SICP] 的正确表示形式吗?我错过了什么?

问题描述

SICP 的第 2.2.2 节(层次结构)的第二句:作者说((1 2) 3 4)(三个元素的列表)可以由(cons (list 1 2) (list 3 4)).

我认为(当然是错误的)它将构造((1 2) (3 4))(两个元素),因为:

  1. 3并且4将包含在嵌套list的非顶层中cons,并且
  2. cons构造一对项目,pair 表示 2 个元素而不是 3 个。

我在这里不明白什么?

标签: listnestedschemesicp

解决方案


列表是一串对,以一个cdr为空列表的对结尾。

(list 3 4)是两对,相当于

                 (cons 3 (cons 4 '()))

3对也是如此(cons (list 1 2) (list 3 4)),相当于

(cons (list 1 2) (cons 3 (cons 4 '())))

一般来说,如果你有一个 list old-list,你可以在前面创建一个新元素的新列表:

(cons new-element old-list)

如果你写的话,你会得到你所期望的

(list (list 1 2) (list 3 4))

推荐阅读