誰かが次のような行動を説明することはできますか?具体的には、関数は毎回異なるリストを返すのはなぜですか?関数が呼び出されるたびにsome-list
が'(0 0 0)
に初期化されないのはなぜですか?この関数は毎回異なる値を返すのはなぜですか?
(defun foo()
(let ((some-list '(0 0 0)))
(incf (car some-list))
some-list))
出力:
> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
ありがとう!
EDIT:
また、出力'(1 0 0)
に私は機能を望むたびに仮定して、この機能を実装するための推奨方法は何ですか?
ああ、今は意味をなさない。明確な説明をありがとう。 –
おそらく、クォータクォーテイングが新鮮なリストを返すことが保証されていないということを追加するといいでしょう。 – 6502
"わかっていない限り、あなたがやっていること"リテラルデータを変更する動作は未定義です。仕様によると、実際にあなたが何をしているのかを(確実に)知ることができないので、 "**常に定数としてのみ( '(0 0 0)のような)リテラルリストを使うべきです。 –