#キーワードをrenameすると識別子になってキーワードでなくなってしまうので、キーワード引数を取るマクロにrenameしたキーワードを渡すとunknown keywordになってちょっと悲しいです。今はERマクロを書いていて気付いたのでrenameしないようにしてとりあえず事なきを得ましたが、syntax-rulesだと全部renameされるので困りそうです。どのレベルで解決すべきでしょうか。
#gosh> (define-syntax foo (syntax-rules () ((_) (define-record-type (bar <record> :mixins ()) #f #f))))
#<undef>
gosh> (foo)
*** ERROR: unknown keyword #<identifier user#:mixins.3226a20>
##$ GAUCHE_KEYWORD_DISJOINT=1 gosh
gosh> :foo
*** ERROR: identifier required, but got :newline
While compiling "/usr/local/share/gauche-0.97/0.9.10_rc1/lib/gauche/pputil.scm" at line 331: (define (pprint obj :key (port (current-output-port)) (controls *default-controls*) width length leve ...
While loading "/usr/local/share/gauche-0.97/0.9.10_rc1/lib/gauche/pputil.scm" at line 342
Stack Trace:
_______________________________________
0 (write expr *controls*)
at "/usr/local/share/gauche-0.97/0.9.10_rc1/lib/gauche/interactive.scm":315
#あ、これはpprintをロードするときに起きているみたいですね。
#gosh> (^ (:key ((:x y) 42)) y)
*** ERROR: identifier required, but got :x
#lambdaのキーワード引数ではキーワードがrenameされることをあてにしているのかな。
#Gaucheには(Schemeには)ワイルドカードはありませんでしょうか。
#>tioner 何に対するワイルドカードでしょうか。ファイルの検索なら、Gaucheだとglobという組み込み関数があります
#gosh> (glob "/usr/bin/gauche*")
("/usr/bin/gauche-cesconv" "/usr/bin/gauche-config" "/usr/bin/gauche-install"
"/usr/bin/gauche-package")
#>kaki まず、KEYWORD_DISJOINTで:keyの ((:x y) 42) がエラーになるのは、多分チェック漏れですね。
#元の話は、renameされたとしても本来同じbindingからインポートしてるはずなので、システム側で対応できるはず
#let-keywordsの展開が問題っぽいな
#>kaki 前者の問題には対応しました (update後make clean && makeが必要)
#>kaki 後者の問題も対応