1

cons 的嵌套应用程序会构造什么不正确的列表?我正在学习计划并对cons. 我遇到了这个答案:

Scheme中的Cons element to list vs cons list to element

我知道当第二个参数cons是一个列表时,它将第一个参数添加到列表的头部

(cons 1 (list 2 3) 
=>'(1 2 3)

下面这对对我来说很有意义:

(cons 2 3); 2.3 pair

但是我不明白为什么下面的表达式构造了一个不正确的列表

(cons 1 (cons 2 3))
=> '(1 2 . 3)   ; an improper list

我只是无法想象上面的表达式发生了什么

你能详细说明一下吗?

4

1 回答 1

4

您遇到的困惑并不是独一无二的。这只是符号,仅此而已,在你学会看那个符号之前,一切都是令人困惑的。

首先,让我们从正确的列表开始。这些是以空列表结尾的列表:

(cons 1 (cons 2 (cons 3 '())))
; => (1 2 3)

这个列表(1 2 3)实际上是 : 的简写(1 2 3 . ()):基本上是一个列表,其中最后一个 cons 指向一个空列表。

现在,如果我们()用 4 代替 ,让我们看看我们得到了什么:

(cons 1 (cons 2 (cons 3 4)))
; => (1 2 3 . 4)

请注意,它与 没有太大不同(1 2 3 . ()),是吗?

当然,这两个都是 和 的更长形式的(1 . (2 . (3 . ())))简写(1 . (2 . (3 . 4)))

于 2014-07-24T22:03:07.153 回答