からのこの一節On Lisp
は本当に紛らわしいです - などの引用符で囲まれたリストを返すと、実際に関数が将来'(oh my)
どのように動作するかを実際に変更する方法が明確ではありません: 返されたリストは関数でゼロから再度生成されますか?呼ばれた?
戻り値に引用符付きリストが組み込まれるように exclaim を定義すると、
(defun exclaim (expression) (append expression ’(oh my)))
その後、戻り値の破壊的な変更
(exclaim ’(lions and tigers and bears)) -> (LIONS AND TIGERS AND BEARS OH MY) (nconc * ’(goodness)) -> (LIONS AND TIGERS AND BEARS OH MY GOODNESS)
関数内のリストを変更できます。
(exclaim ’(fixnums and bignums and floats)) -> (FIXNUMS AND BIGNUMS AND FLOATS OH MY GOODNESS)
このような問題に対する明確な証拠を作成するには、次のように記述します。
(defun exclaim (expression) (append expression (list ’oh ’my)))
exclaim
結果に単語を追加するための最後の呼び出しはどのくらい正確goodness
ですか? 関数は外部変数を参照していないので、関数の動作をnconc
実際に変更するための別の呼び出しはどのように行われたのでしょうか?exclaim