为什么cons的嵌套应用程序构造不正确的列表



cons的嵌套应用程序构造不正确的列表是什么?我正在学习方案,对cons感到困惑。我偶然发现了这个答案:

Cons元素到列表vs Cons列表到Scheme中的元素

我知道当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

我就是想不出上面的表达式是怎么回事

你能详细说明一下吗?

你所经历的困惑并不是唯一的。它只是一个符号,仅此而已,在你学会看这个符号之前,一切都是令人困惑的。

首先,让我们从适当的列表开始。这些列表以空列表结束:

(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)))的简写形式。

相关内容

  • 没有找到相关文章

最新更新