素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

関数を定義するマクロ

マクロおもしろいなあ。

#!/usr/bin/env gosh

(define-macro (ca..r n)
 (string->symbol (make-string n #\a))
 `(define (
     ,(string->symbol (string-append "c" (make-string n #\a) "r"))
     lis)
   (define (/lis lis i)
    (if (> i 0)
     (/lis (car lis) (- i 1))
     lis))
   (/lis lis ,n)))

(ca..r 3)
(ca..r 10)

(print
 (caar '((1 . 2) . 3)))

(print
 (caaar '(((1 . 2) . 3) . 4)))
(print caaaaaaaaaar)