gpt4 book ai didi

scheme - ((1 2) 3) 和 ((1 2) . 3) 一样吗?

转载 作者:行者123 更新时间:2023-12-04 17:22:25 26 4
gpt4 key购买 nike

我在 Scheme(使用 DrRacket)中获得了一项任务,要求我使用 cons 从组件 1、2、3 和 () 创建列表 ((1 2) 3)

我已经设法达到 ((1 2) . 3) 使用:

(cons (cons '1 (cons '2 '())) '3)

然而,这是一回事吗?

最佳答案

注意:这是从 my answer 中提取的至 Recursive range in Lisp adds a period?问题是不同的(所以不是重复的),但是关于如何从 cons 单元构造列表以及如何打印列表的背景解释是相同的。结局有点不同。

Scheme 中的列表要么是空列表 () (在某些 Lisps 中也称为 nil),或具有 car 的 cons 单元格(也称为 first )是列表的一个元素,其 cdr (也称为 rest )要么是列表的其余部分(即另一个列表),要么是终止列表的原子。常规终止符是空列表() ;列表由 () 终止被称为“适当的 list ”。由任何其他原子终止的列表称为“不正确的列表”。名单(1 2 3 4 5)包含元素 1、2、3、4 和 5,并以 () 结尾.你可以构造它

(cons 1 (cons 2 (cons 3 (cons 4 (cons 5 ())))))

现在,当系统打印一个 cons 单元格时,一般情况是通过
(car . cdr)

例如, (cons 1 2) 的结果打印为
(1 . 2)

由于列表是由 cons 单元构建的,因此您也可以对列表使用此表示法:
'(1 2 3 4 5)                      ; ==
'(1 . (2 . (3 . (4 . (5 . ())))))

不过,这相当笨重,所以大多数 lisps(我所知道的)都有一个特殊的情况来打印 cons 单元格:如果 cdr是一个列表(另一个 cons 单元格,或 () ),然后不要打印 . ,并且不要打印 cdr 的周围括号(否则它会拥有,因为它是一个列表)。

有了对列表和 cons 单元格的理解,我们就可以考虑具体情况 ((1 2) 3)((1 2) . 3) .让我们将其中的每一个分解为 cons 单元格。
((1 2) 3)                              ; ==
((1 . (2 . ()) . (3 . ())) ; ==
(cons (cons 1 (cons 2 ()) (cons 3 ()))
((1 2) . 3)                   ; ==           
((1 . (2 . ())) . 3) ; ==
(cons (cons 1 (cons 2 ())) 3)

每种情况的最后几行都不同,所以 ((1 2) 3)((1 2) . 3)不一样。

关于scheme - ((1 2) 3) 和 ((1 2) . 3) 一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com