Lisp的追加工作不正常(Lisp Append Not Working Properly)

2019-08-18 05:27发布

你好我想一个简单的元素添加到一个口齿不清列表。

(append queue1 (pop stack1))

我想上面的代码将追加stack1中的第一个元素QUEUE1。 难道queue1必须是非零? 谢谢。

Answer 1:

追加返回级联列表( queue1与第一元件stack1所附)。 它不会修改队列1。

追加的破坏力相当于是nconc:本追加到列表“到位”。



Answer 2:

你没有说明具体的Lisp你的意思,但在Common Lisp中至少包括:

  1. append连接列表,所以它的所有参数必须是列表,而不是原子。 如果你真的想要一个元素追加到你必须做的清单(append list1 (list element)) 这不是一个好主意,因为在大多数的Lisp列表是单链表,以及一个完整的列表将不得不遍历以追加到尾部。 通常人们会追加到与缺点前,然后在完成时反向名单,但是这显然不会为队列工作。

  2. APPEND不会修改其参数。 NCONC是一种破坏性的功能。 虽然我相信NCONC特别是规定做更多或更少的人会发生什么,最具破坏性的功能被允许破坏他们的论点,再利用他们的记忆,但没有必要留下任何连贯的后面。

  3. Common Lisp中列表被实现为利弊细胞或零,这意味着它们的行为具有与后者一些怪癖的链。 如果你想有一个列表作用更多,你会从其他语言的期望,然后用列表的抽象数据结构。 更何况,如果你想与不断追加到尾部的队列。 有可用许多必要的数据结构CL-容器系统,并且在功能性数据结构F若有 。



文章来源: Lisp Append Not Working Properly
标签: lisp append