2

(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 ...)definehelper

4

1 に答える 1