には、例えばCommon Lispでは、このlet
は変数はCommon Lispのlet変数で定義されていますか?
(let ((a 5)) (print a))
defparameter
と同様に可変a
です、またはdefvar
の場合のように、一定a
のですか?
には、例えばCommon Lispでは、このlet
は変数はCommon Lispのlet変数で定義されていますか?
(let ((a 5)) (print a))
defparameter
と同様に可変a
です、またはdefvar
の場合のように、一定a
のですか?
あなたがa
は何か他のものを指し作るすなわち、a
がバインドされている内容を変更することができます
(let ((a 5)) (setf a 10))
a
によって参照値が可変である場合、あなたはそれを変異させることができます。
(let ((a (list 5))) (setf (first a) 10))
defparameterのように変更可能か、またはdefvarの場合のように定数ですか?
いいえ、DEFVAR
は定数を定義していません。その後
(defvar *var* :value)
(setf *var* 5)
:何が起こることは、あなたがDEFVAR
フォームを評価するとき、それはシンボルがすでにバインドされている最初のかどうかをチェックするということです
*var*
=> 5
。この場合、既存の値がそのまま保持されます。一方、DEFPARAMETER
は常に変数を再初期化します。
これを明確にするいくつかの例があります。あなたはreplで彼らを試すことができます。うまくいけば、これらの例は、あなたがlet
が何をするかの良いアイデアを得るのを助ける必要があります彼らはより多くのdefvar
かdefparameter
(loop repeat 2 do
(let ((a 1)) (print a) (setf a 5) (print a)))
(loop repeat 2 do
(let ((a (list 1 2)))
(print (first a))
(setf (first a) 5)
(print (first a))))
(loop repeat 2 do
(let ((a '(1 2)))
(print (first a))
(setf (first a) (+ (first a) 5))
(print (first a))))
のようなものかどうかを考えるようにしてください。 replに3番目の例を入れるとどうなるのかは実際には実装に依存しており、let
とはほとんど関係がなく、quote
とはるかに関係しています。
定数は 'DEFVAR'ではなく' DEFCONSTANT'で作成されます。 – Barmar