Lisp の progn 関数
Lisp には、progn という関数がある。これは、複数の処理をブロック化するものらしい。たとえば、何らかの条件を比較した後で処理を行いたい、とする。たいていの場合は、if 文を使って
(if (> x y) (真の処理) (偽の処理))
というように書くはず。このとき、真の処理、偽の処理それぞれ一つの関数で済めばいいが、いくつかの処理を行いたい、というときなどに使えるのが、この progn 関数。C や Java なんかでいうところのブロックを作る関数、とでも言えばいいのかな・・・
(defun progn-testcase (x y) (if (> x y) (progn (format t "Hello ") (format t "World.~%")) (progn (format t "Good-bye ") (format t "World.~%")) ) )
こんな例なら、format を一つにまとめればいいじゃん・・・という突っ込みはナシでお願いします。あくまでも例です。。。