2011年1月23日日曜日

M-99 Q3


このエントリーをはてなブックマークに追加


LISPど素人が挑むM-99

M-99 マクロ99問
http://common-lisp-users.jp/index.cgi?M-99

問3:Common LispのWHENを作成せよ
テーマ:制御構文の自作
(my-when (< 1 2)
  (print "hello"))
;->
;   "hello"
;=> "hello"

解3:
CL-USER> (defmacro my-when (condition &rest body)
        `(if ,condition
          (progn ,@body)))
        
MY-WHEN

CL-USER> (my-when (> 2 1)
            (print "hello1")
            (print "hello2"))

"hello1" 
"hello2" 
"hello2"

CL-USER> (my-when (< 2 1)
            (print "hello1")
            (print "hello2"))
NIL

補足3:展開されたS式
(IF (< 2 1)
    (PROGN (PRINT "hello1") (PRINT "hello2")))

0 件のコメント:

コメントを投稿