Lisp Append无法正常工作

Lisp Append无法正常工作,lisp,append,Lisp,Append,嗨,我正在尝试将一个简单元素附加到lisp列表中 (append queue1 (pop stack1)) 我认为上面的代码会将stack1的第一个元素附加到queue1。queue1是否需要为非零?谢谢。Append返回连接的列表(queue1,第一个元素为stack1)。它不修改队列1 append的破坏性等价物是NCOC:它将“就地”添加到列表中。您没有指定您指的是哪个Lisp,但在Common Lisp中至少: APPEND连接列表,因此其所有参数必须是列表,而不是原子。如果您真的想将

嗨,我正在尝试将一个简单元素附加到lisp列表中

(append queue1 (pop stack1))
我认为上面的代码会将stack1的第一个元素附加到queue1。
queue1
是否需要为非零?谢谢。

Append返回连接的列表(
queue1
,第一个元素为
stack1
)。它不修改队列1


append的破坏性等价物是NCOC:它将“就地”添加到列表中。

您没有指定您指的是哪个Lisp,但在Common Lisp中至少:

  • APPEND连接列表,因此其所有参数必须是列表,而不是原子。如果您真的想将一个元素附加到列表中,您必须执行
    (append list1(list element))
    。这不是一个好主意,因为在大多数Lisps中,列表是单链接的,必须遍历整个列表才能附加到末尾。通常会在前面加上CONS,然后在完成后反转列表,但这显然不适用于队列

  • APPEND不修改其参数。NCOC是一种破坏性功能。虽然我相信NCOC特别是做了人们所期望的或多或少的事情,但大多数破坏性函数都被允许破坏它们的参数,重新使用它们的内存,但不一定会留下任何连贯的内容

  • Common Lisp中的列表被实现为cons单元格链或nil,这意味着它们的行为与后者有关。如果您希望一个列表能够像其他语言所期望的那样发挥作用,那么就使用一个列表抽象数据结构。如果您想要一个末尾带有常量append的队列,则更是如此。在系统中有许多必需的数据结构可用,在中有功能数据结构可用


  • 因此,要附加到列表中,我只需执行(nconc queue1'4)将数字4附加到列表queue1中。如果ncoc为nil,它还会追加吗?Thanksys,(NCOC queue1'4)将回收queue1。但是按照习惯,您仍然应该使用返回值,而不是依赖于副作用。抱歉,我不确定如果你通过了nil会发生什么(尽管我假设它在nil文本上不起作用):我想,启动你的Lisp实现,试试吧!您确实应该阅读一本介绍性书籍,将其附加到Lisp列表末尾不是一个好主意append返回一个附加了参数列表的列表-(append list1 list2 list3)->一个包含list1和list2元素的列表,list3将空列表附加到空列表