アクセサー関数nthの使用に問題があります。リストをいくつかの関数に渡し、 nthを使用して関数内のリストの要素に新しいバインディングを作成します。次に、関数からリストを呼び出すと、リストが変更され、それは私が望むものではありません! 何が起こるのですか?
いくつかの例
(defun test (x) (incf x)) => TEST
(setq a 1) => 1
(test a) => 2
a => 1
上記のことは理解できますが、すべてをリストに変更すると、理解できないことが起こります
(defun test (x) (incf (nth 0 x))) => TEST
(setq a '(1)) => (1)
(test a) => 2
a => (2)
a は (1) であると予想していましたが、なぜ変更されたのですか? carやfirstなどの他の機能も試しましたが、結果は同じです。
PS、Lispworks と SBCL で試してみましたが、同じ結果でした。