特定の ID を指定してボードから要素を削除する関数を Lisp で実行しようとしています。私のボードは 2 次元配列で、各位置には次のようなものがあります(value (id x y)(id x y)...(id x y))
。(id x y)
id が関数呼び出しで指定された int と等しいすべてのトリプレットを削除する必要があります。
指定されたIDを持つ要素を除いて、ボードのコンテンツを新しいものにコピーする、おそらく非常に悪い解決策を思いつきました。コンソールでいくつかの例を実行してみましたが、正しい結果が返されますが、配列の内容は変更されません。関数の最後にあるセットは、まさにそれを行うはずではありませんか? また、コンソールの結果が変更されたボードであるT
かどうかNIL
ではないことを期待していました...
(defun remove-id (board int)
(let ((lin (board-lines board))
(col (board-columns board)))
(let ((new-board (new-board lin col)))
(dotimes (i lin)
(dotimes (j col)
(when (not (null (aref board i j)))
(dolist (el (rest (aref board i j))
(if (not (= (el-id el) int))
(copy-content new-board (el-x el)(el-y el)))))))
(setf board (copy-board new-board)))))
私が使用している関数はすべて正しく機能します。名前が一目瞭然であることを願っています。