ループ内で使用されるリストがあり、各反復で、リストを永続的に変更する関数を適用します(要素のポップと追加)。問題は、元のリストがゼロの場合は常に変更されないことです。どうすればこの問題を解決できますか?私のコードを以下に示します
(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つの要素が含まれている場合、その要素がポップされてリストがnilになると、適用された変更はリストに永続的ではなくなります。これは、nconcがどのように定義されているかによるものだと思います。最初の引数がnilの場合、変更せずに2番目の引数を返すだけです。これについてどうやって行くかについてのアイデアはありますか?
PS:上記のコードは役に立たないことは知っていますが、残念ながらコードを投稿できない学校のプロジェクトに同じコンセプトを使用しています。