List 为什么cons的嵌套应用程序构造不正确的列表?
cons的嵌套应用程序构造了什么不正确的列表? 我正在学习计划,对List 为什么cons的嵌套应用程序构造不正确的列表?,list,scheme,racket,cons,List,Scheme,Racket,Cons,cons的嵌套应用程序构造了什么不正确的列表? 我正在学习计划,对cons感到困惑。我找到了这个答案: 我知道当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
感到困惑。我找到了这个答案:
我知道当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)
这个列表,(1233)
,实际上是(1233)()
:基本上是一个最后一个cons指向空列表的列表
现在,如果我们用4代替()
,让我们看看我们得到了什么:
(cons 1 (cons 2 (cons 3 4)))
; => (1 2 3 . 4)
注意,它与(1 2 3.()
)没有太大区别,是吗
当然,这两个词都是较长形式的
(1.(2.(3)()
和(1.(2.(3.4))
的缩写。你所经历的困惑并不是独一无二的。这只是一种符号,仅此而已,在你学会理解这种符号之前,一切都是混乱的
首先,让我们从正确的列表开始。这些列表以空列表结尾:
(cons 1 (cons 2 (cons 3 '())))
; => (1 2 3)
这个列表,(1233)
,实际上是(1233)()
:基本上是一个最后一个cons指向空列表的列表
现在,如果我们用4代替()
,让我们看看我们得到了什么:
(cons 1 (cons 2 (cons 3 4)))
; => (1 2 3 . 4)
注意,它与(1 2 3.()
)没有太大区别,是吗
当然,这两个词都是较长形式的
(1.(2.(3)()
和(1.(2.(3.4))
的缩写。这两个词的可能重复之处在于消费品的印刷方式,而(1.(2.3))
通常以(12.3)的形式印刷
。这可能与消费品的打印方式有关,(1.(2.3))
通常打印为(12.3)
。