Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140908154624_Common_Lisp_defvar_defparameter |
Common_Lisp_defvar_defparameter
;; SBCL の REPL を起動した直後 = まっさらの状態 ;; シンボル foo は未定義なのでエラーになる * foo debugger invoked on a UNBOUND-VARIABLE: The variable FOO is unbound. Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [ABORT] Exit debugger, returning to top level. (SB-INT:SIMPLE-EVAL-IN-LEXENV FOO #<NULL-LEXENV>) 0] :a ;; defvar で値を代入 * (defvar foo 1) FOO * foo 1 ;; foo はもう未定義ではないので、 ;; もう一度別の値で defvar しても・・・ * (defvar foo 100) FOO * foo 1 ;; 未定義の状態から最初にバインドされた値を保持している ;; defparameter は単純に呼ばれる度に評価されて ;; 変数に都度代入される * bar debugger invoked on a UNBOUND-VARIABLE: The variable BAR is unbound. Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [ABORT] Exit debugger, returning to top level. (SB-INT:SIMPLE-EVAL-IN-LEXENV BAR #<NULL-LEXENV>) 0] :a * (defparameter bar 1) BAR * bar 1 * (defparameter bar 100) BAR * bar 100 ;; スペシャル変数としての振る舞いは同じ * (let ((foo 8)(bar 8)) (format t "foo: ~D, bar: ~D~%" foo bar)) foo: 8, bar: 8 NIL * foo 1 * bar 100
|
© Shin Nakamura/BasicWerk 2014 |