我想在列表的最后一个元素旁边插入一个元素,但是我只知道如何在列表的第一个元素旁边插入一个元素,有人可以进一步帮助我吗? 示例:(插入'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)
答案 0 :(得分:4)
列表是单链接列表,因此仅需添加到最前面即可,而不必复制列表的某些部分。您尝试复制第一对,然后将您的对添加为第二个元素,然后使用参数共享原始列表的其余部分。
要添加为最后一个元素,需要这样做直到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的数据。