我有一个在循环中使用的列表,并且在每次迭代中,我都会应用一个永久更改列表的函数(弹出和添加元素)。问题是,只要原始列表为零,就永远不会更改。我该如何解决这个问题?我的代码如下所示
(defun looping-func ()
(let ((queue '(2)))
(loop while (not (null queue)) do
(let ( (num (pop queue)))
(if (oddp num)
(format t "~%~A success" num)
(progn (format t "~%fail")
(add-to-list (1+ num) queue)))))))
(defun add-to-list (elem l)
(nconc l (list elem)))
如果列表包含超过 1 个元素,则代码将按预期工作。如果它恰好包含 1 个元素,则一旦弹出该元素并且列表变为 nil,则应用的更改不再对列表永久存在。我想这是因为 nconc 是如何定义的,如果第一个参数为零,则只返回第二个参数而不做任何更改。关于如何解决这个问题的任何想法?
PS:我知道上面的代码没用,但是我在一个学校项目中使用了相同的概念,很遗憾我无法发布代码。