Lisp 将两个列表附加在一起
以上是我到目前为止的代码。我试图将两个列表附加到一个列表中。第一个函数接收一个数字并返回两个数字的列表。第二个函数用于接收列表,将树节点函数应用于该列表中的第一个元素,然后将原始列表和树节点列表附加在一起。例如:(3,4,5)如果你有一个列表Lisp 将两个列表附加在一起,lisp,common-lisp,Lisp,Common Lisp,以上是我到目前为止的代码。我试图将两个列表附加到一个列表中。第一个函数接收一个数字并返回两个数字的列表。第二个函数用于接收列表,将树节点函数应用于该列表中的第一个元素,然后将原始列表和树节点列表附加在一起。例如:(3,4,5)如果你有一个列表a和一个列表b,你可以通过对它们应用append来得到这两个: (defun tree-node(x) (list(* 2 x) (+(* 2 x) 1)) (tree-node 4) (8 9) (defun special-queue(y) (se
a
和一个列表b
,你可以通过对它们应用append
来得到这两个:
(defun tree-node(x)
(list(* 2 x) (+(* 2 x) 1))
(tree-node 4)
(8 9)
(defun special-queue(y)
(set x (list y (+ 1 y) (+ 2 y)))
(append(list(rest z) (tree-node first z)))
)
请注意,您所写的内容实际上是:
(append a b)
要建立本地绑定,请使用let
:
(append (list a b)) ; wrong
(set x…
不会做您可能认为它会做的事情set
是Common Lisp中的一个函数,主要是为了与古老的Lisp向后兼容而存在的(设置x 42)
将x
作为变量进行计算,并将x
的值传递给set
。该值必须是一个符号。函数将42
存储到该符号的动态/全局函数绑定中。该符号很可能不是x
,除非x
本身是一个值。TL:DR:您可能需要setf
或setq
。您需要正确格式化代码;它现在无法读取。同样,对于全局变量,如x
和z
,它们应该具有*earnuffs*
,这样它们就可以脱颖而出。
(let ((initial-queue (list n (+ n 1) (+ n 2))))
(append (rest initial-queue) (child-indices (first initial-queue))))