首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计划中的Cons元素到list和cons to element

计划中的Cons元素到list和cons to element
EN

Stack Overflow用户
提问于 2013-10-06 19:37:57
回答 1查看 9.3K关注 0票数 11

在方案中,使用con将元素组合为list与使用con将列表组合到元素之间有什么区别?

此外,反方究竟是如何运作的呢?它是将元素添加到列表的末尾还是开头?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-06 20:48:24

原始cons简单地将两件事结合在一起,其中一些东西被认为是列表这一事实是偶然的。例如,这可以工作,并创建一对(也称为反单元格):

代码语言:javascript
复制
(cons 1 2)
=> '(1 . 2)     ; a pair

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

代码语言:javascript
复制
(cons 1 '(2 3))
=> '(1 2 3)     ; a list

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

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

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

代码语言:javascript
复制
(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),然后必须在3 2 1顺序中对元素进行cons

代码语言:javascript
复制
(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,它接收两个列表作为参数:

代码语言:javascript
复制
(append '(1 2 3) '(4))
=> '(1 2 3 4)
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19213072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档