在方案中,使用con将元素组合为list与使用con将列表组合到元素之间有什么区别?
此外,反方究竟是如何运作的呢?它是将元素添加到列表的末尾还是开头?
谢谢!
发布于 2013-10-06 20:48:24
原始cons简单地将两件事结合在一起,其中一些东西被认为是列表这一事实是偶然的。例如,这可以工作,并创建一对(也称为反单元格):
(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的第二个参数不是list,则结果将是一对或不正确的列表,这意味着它不会以'()结尾,因为它应该被视为一个列表:
(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。
(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,它接收两个列表作为参数:
(append '(1 2 3) '(4))
=> '(1 2 3 4)https://stackoverflow.com/questions/19213072
复制相似问题