首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在lisp中插入元素?

如何在lisp中插入元素?
EN

Stack Overflow用户
提问于 2019-06-02 11:02:38
回答 1查看 966关注 0票数 1

我想在列表的最后一个元素旁边插入一个元素,但我只知道如何在列表的第一个元素旁边插入一个元素,有人可以进一步帮助我吗?示例:(插入'5 '(1 3 2 7 8 9))应输出=> (1 3 2 7 8 5 9)

代码语言:javascript
复制
(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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-02 18:11:16

列表是单链表,因此只能添加到最前面,而不必复制列表的一部分。您尝试创建第一个元素对的副本,将您的元素对添加为第二个元素,然后使用参数共享原始列表的其余部分。

为了添加最后一个元素,您需要这样做,直到list为空,然后返回一个包含一个元素的列表。所有的缺点都不会有共同点。所以:

代码语言:javascript
复制
(insert 'x '())  ; ==> (list 'x)
(insert 'x '(1)) ; ==> (cons '1 (insert 'x (cdr '(1))))

当然,这可以使用append来完成。懒惰在编程中得到奖励:

代码语言:javascript
复制
(defun insert-last (item list)
  (append list (list item)))

要知道,如果你有一个递归函数或一个迭代,你根据参数为许多元素添加了这样的东西,你做的是一个非常糟糕的算法。要么使用loopcollect到最后,要么让列表倒退并在最后一步反转,这要好得多。然后,您将获得n次或2n次数据传递,而不是n^2。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56411900

复制
相关文章

相似问题

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