読者です 読者をやめる 読者になる 読者になる

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

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

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

マクロ

scheme
(define-macro
  (alias new-name old-name)
  `(define-macro
     (,new-name . body)
     `(,,old-name ,@body)))

(alias -> 'lambda)
(alias identity 'values)
(alias いふ 'if)

old-nameをシングルクオートで括っているのは、特殊形式に対応するため。
マクロを定義するマクロを書く時、内側のマクロで外側の変数を埋め込む時は,',s-exprという風にして、内側のマクロを展開した時に,が残るようにしなきゃいけないので間違えやすい。

(import (srfi srfi-13))

;; (%w foo bar fizz) -> ("foo" "bar" "fizz")
;; (%w "foo:-) bar fizz") -> ("foo:-)" "bar" "fizz")
(define-macro
  (%w first . rest)
  (if (null? rest)
    `(string-tokenize ,first)
    `(list ,@(map symbol->string
                  (cons first rest)))))

ところで、importとかのライブラリ読み込みって標準化されてるのだろうか。