我想在列表的最后一个元素旁边插入一个元素,但我只知道如何在列表的第一个元素旁边插入一个元素,有人可以进一步帮助我吗?示例:(插入'5 '(1 3 2 7 8 9))应输出=> (1 3 2 7 8 5 9)
(defun insert (item list)
(cons (first list)
(cons item
(rest list))))
//when I do (insert '5 '(1 3 2 7 8 9)) I get (1 5 3 2 7 8 9)
发布于 2019-06-02 18:11:16
列表是单链表,因此只能添加到最前面,而不必复制列表的一部分。您尝试创建第一个元素对的副本,将您的元素对添加为第二个元素,然后使用参数共享原始列表的其余部分。
为了添加最后一个元素,您需要这样做,直到list
为空,然后返回一个包含一个元素的列表。所有的缺点都不会有共同点。所以:
(insert 'x '()) ; ==> (list 'x)
(insert 'x '(1)) ; ==> (cons '1 (insert 'x (cdr '(1))))
当然,这可以使用append
来完成。懒惰在编程中得到奖励:
(defun insert-last (item list)
(append list (list item)))
要知道,如果你有一个递归函数或一个迭代,你根据参数为许多元素添加了这样的东西,你做的是一个非常糟糕的算法。要么使用loop
来collect
到最后,要么让列表倒退并在最后一步反转,这要好得多。然后,您将获得n次或2n次数据传递,而不是n^2。
https://stackoverflow.com/questions/56411900
复制相似问题