マクロの練習
マックロくろ助出ておいで〜
でないと目玉を・・・・展開するぞこら!!!
・・・。
なんとなくマクロの練習をしておりました。
いつの日かOn Lisp読めるかなぁ。(知識的にも、積読リスト的にも....
まず、andを自分で定義してみる練習
(defmacro and2 (&rest args) (cond ((null args) t) (t (labels ((make-list (x) (cond ((null (cdr x)) (car x)) (t (list 'if (car x) (make-list (cdr x)))) ))) (make-list args)) ) ))
labelsっていうやつを今日知りました。
続いてletを定義してみる訓練
(defmacro mylet (vlist &rest blist) `((lambda ,(mapcar #'car vlist) ,@blist) ,@(mapcar #'cadr vlist)) )
そういえばSchemeには名前付きletっていうのがあった(はず)だけど
CLにはなさげ(?)なので定義してみる特訓
(defmacro named-let (name vlist &rest blist) `(labels ((,name ,(mapcar #'car vlist) ,@blist)) (,name ,@(mapcar #'cadr vlist)) ))
ちょびっとマクロナルドにも慣れてきたかなぁ。
macroexpandってなかなか便利ですね
はてな記法で自動で色づけしてくれるのはいいけど、
色合いがあまり好きじゃないかも〜・・・(^^;