Special Operator PROGN
progn
form* => result*
form - 暗黙のprogn
result - formの返却値
progn
はformを与えられた順に評価します。
最後以外の各formの値は切り捨てられます。
もしprogn
がトップレベルフォームに現れたら、 progn
内の全てのフォームは、 コンパイラによってトップレベルフォームであると見なされます。
progn) => NIL
(progn 1 2 3) => 3
(progn (values 1 2 3)) => 1, 2, 3
(setq a 1) => 1
(if a
(progn (setq a nil) 'here)
(progn (setq a t) 'there)) => HERE
(=> NIL a
なし。
なし。
Common Lispでは、多くの場所で暗黙のprognという構文で使われています。 これは、それらの構文の部分は、 多くのフォーム書くことができ、 連続で評価され、 最後以外のすべてのフォームの返却値は無視され、 最後のフォームの結果が返却されるということを意味しています。 そのような場所が制限なしに含まれる場所として、 例えば下記のようなものがあげられます。 ラムダ式のボディ部、 様々な制御文や条件文のフォームのボディ部 (例えば、case
, catch
, progn
, when
)。