#!r6rs (library (foo) (export d) (import (rnrs)) ;; def ;; <- NG? (define-syntax def (lambda (x) (syntax-case x () (k (with-syntax ((d (datum->syntax #'k 'd))) #'(define d 'ok)))))) def ;; OK ) #!r6rs (import (rnrs) (foo)) dNG?っとマークが打ってある行なのだが。OKのマークの行は正しく動くべきだと思っているのだけど(Ypsilonはエラーになった、ChezはOK、Moshは現在手元にない)、マクロの展開がコンパイルされる前に行われるのであれば、NG?の部分もvalidな気がするんだけど、どうなんだろう?(ちなみに、パターンの部分を普通のマクロ(?)形式にすると当然Ypsilonでも動く。)
正直これがだめでも困ることはないんだけど、現状の実装ではこれをはじくことができない(実装方針は一つ前の投稿に書いてあるのでそっちを見て) 。ものすごく頑張ればいけるような気もするけど、割とどうでもいいエラー処理な気がするのでたぶん放置すると思う。問題になってから考えればイイ系。
No comments:
Post a Comment