#R7RSに内部define-syntaxはあるはずと指摘されました。 https://twitter.com/tk_riple/status/801894124366528513 7.1章formal syntaxには確かにありますね。ウカツ! #そうすると、internal definitionは単純に letrec と letrec-syntax には展開できないということになるんでしょうか。
#http://twitter.com/dico_leque/status/802014976797851650 なるほど。上の例はR7RS的エラーっぽいですね。お騒がせしました。ご指摘いただいた方々ありがとうございました。 #コード見直してたんだけどなんかかなり場当たり的に対応してるな>internal define-syntax。これlet*みたいなセマンティクスに見えるんだけど大丈夫だろうか (と自分で書いておきながら心配になる)
#gosh> (define (Ooo? k)
(define-syntax o?
(syntax-rules ()
[(_ 0) #f]
[(_ n) (e? (- n 1))]))
(define-syntax e?
(syntax-rules ()
[(_ 0) #t]
[(_ n) (o? (- n 1))]))
(o? k))
Ooo?
gosh> (Ooo? 4)
*** ERROR: unbound variable: #<identifier user#e?.e9b860>
Stack Trace:
_______________________________________
0 (e? (- k 1))
expanded from (o? k)
at "(standard input)":22
1 (eval expr env)
at "/usr/share/gauche-0.9/0.9.5/lib/gauche/interactive.scm":282
#むー、これはo?とe?がletrec-syntaxになるべきだよね?
#そう思います。