マクロのデバッグ
マクロの練習にcutを作っていたら,デバッグしにくくて困ったので,macro-debugを作ってみた.
マクロを一段階ずつ展開,表示してくれる.
(define-syntax my-cut (syntax-rules (<> helper) ((_ helper (args ...) (expr ...)) (lambda (args ...) (expr ...))) ((_ helper (x ...) (proc value ...) <> args ...) (my-cut helper (x ... y) (proc value ... y) args ...)) ((_ helper (x ...) (proc value ...) arg args ...) (my-cut helper (x ...) (proc value ... arg) args ...)) ((_ <> b1 ...) (my-cut helper (x) (x) b1 ...)) ((_ b1 b2 ...) (my-cut helper () (b1) b2 ...)))) (define (macro-debug form) (print form) (let1 expanded (macroexpand-1 form) (if (equal? expanded form) form (macro-debug expanded)))) (macro-debug '(my-cut print <> 4)) ((my-cut print 3 <>) 4) ((my-cut print <> 4) 3) ((my-cut <> 3 4) print)
macro-debugのお陰でマクロのデバッグがスムーズにできました.
こういうのって最初から入ってないのかなぁ.
マクロ内の変数名が適当すぎた.