(define/custom (name (arg type) ...) body ...)
とりわけ に展開されるマクロがあるとしましょう(define (name arg ...) body ...)
。簡単だ。
ここで、(arg type)
パラメーターとして渡すだけでなく、単にarg
. よし、2 番目の句を書きます。ここで、(define/custom (name arg ...) body ...)
は に展開され(define (name arg ...) body ...)
ます。また、簡単です。
しかし、そのような解決策では、すべての引数が型を持つか、どれも型を持たないかのどちらかです。同じ構文リスト (または呼び出されたもの) で 2 つのオプションを混在させるにはどうすればよい...
ですか? どうすれば作れますか??(define/custom (name arg1 (arg2 type2)) #f)
に適切に展開されます。(define (name arg1 arg2) #f)
直観的には、ヘルパー マクロを使用して、およびに展開し(helper a)
、に展開しますが、展開が展開の前に行われるため、これは機能しません。a
(helper (a b))
a
(define/custom (name arg_or_arg+type ...) body ...)
(define (name (helper arg_or_arg+type) ...) body ...)
define
helper