gpt4 book ai didi

list - Cons 元素列出 vs Cons 列表到 Scheme 中的元素

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:02 25 4
gpt4 key购买 nike

使用 cons 将元素组合到列表和使用 cons 将列表组合到 scheme 中的元素有什么区别?

此外,缺点究竟是如何工作的?它是将元素添加到列表的末尾还是开头?

谢谢!

最佳答案

原始 cons 简单地将两个东西粘在一起,其中一些东西被认为是列表的事实是偶然的。例如,这有效并创建了一个(也称为cons cell):

(cons 1 2)
=> '(1 . 2) ; a pair

现在,如果 cons 的第二个参数恰好是一个列表,那么结果将是一个新列表,并且 cons 的第一个参数将被添加到旧列表的头部。换句话说:要创建一个列表,您需要一个列表,即使它是空的:

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

(cons 1 (cons 2 '()))
=> '(1 2) ; a list

(cons 1 '())
=> '(1) ; a list

但是如果 cons 的第二个参数不是一个列表,那么结果将只是一对,或者一个不正确的列表,这意味着它不以 '() 结尾,因为它应该被视为一个列表:

(cons '(1 2) 3)
=> '((1 2) . 3) ; a pair, not a list

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

澄清一下,您不能使用 cons 在列表末尾添加元素。构建列表的通常方法是从右到左,在头部位置反向添加元素 - 假设您要构建列表 '(1 2 3),那么您必须cons 顺序为 3 2 1 的元素:

(cons 3 '())                   ; list is '(3)
(cons 2 (cons 3 '())) ; list is '(2 3)
(cons 1 (cons 2 (cons 3 '()))) ; list is '(1 2 3)

对于需要在末尾添加一个元素的罕见情况(相信我,这样做通常意味着您认为算法错误),您可以使用 append,它接收 < em>两个列表作为参数:

(append '(1 2 3) '(4))
=> '(1 2 3 4)

关于list - Cons 元素列出 vs Cons 列表到 Scheme 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19213072/

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