Shammer's Philosophy

My private adversaria

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 を一つにまとめればいいじゃん・・・という突っ込みはナシでお願いします。あくまでも例です。。。