prognの親戚、prog1やprog2やは数値のS式の結果をゲットできます。
たとえばこんな感じ。
(prog2 (setq i 12) (setq j 34) (format "%5d" (+ i j))) 34
これだと何の役に立つかサッパリですが
(setq i '(1 2 3)) (prog1 (car i) (setq i (cdr i)))
でprog1を繰り返し呼び出すと
1 => 2 => 3 => nil
となります。ぱっと見、破壊的carですねこれは。
ここから
- とりあえず、全ての式は評価している
- その上で、一番目のS式の結果しか返さない
という挙動を読み取る事ができます。
試しに
(setq i 1) (prog1 (setq i (+ i 1)) (setq i (+ i 2)))
でprog1を連続実行すると
2 => 5 => 8 => 11 => 14 =>...
という結果を得ます。
おまけ:prog3はない
prog3とやると
eval: Symbol's function definition is void: prog3
と言われて怒られます。