Gauche > Archives > 2020/11/05

2020/11/05 08:39:44 UTCkaki
#
キーワードを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>
2020/11/05 08:50:42 UTCkaki
#
これキーワードシンボル統合の非互換で http://practical-scheme.net/gauche/man/gauche-refj/kiwado.html#g_t_30ad_30fc_30ef_30fc_30c9_3068_30b7_30f3_30dc_30eb_306e_7d71_5408 に載ってないパターンを見付けてしまった? GAUCHE_KEYWORD_DISJOINT=1 だとエラーにならないですね。
#
$ 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
2020/11/05 08:58:40 UTCkaki
#
あ、これはpprintをロードするときに起きているみたいですね。
#
gosh> (^ (:key ((:x y) 42)) y)
*** ERROR: identifier required, but got :x
#
lambdaのキーワード引数ではキーワードがrenameされることをあてにしているのかな。
2020/11/05 13:58:36 UTCtioner
#
Gaucheには(Schemeには)ワイルドカードはありませんでしょうか。
2020/11/05 18:57:40 UTCshiro
#
>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からインポートしてるはずなので、システム側で対応できるはず
2020/11/05 19:20:56 UTCshiro
#
let-keywordsの展開が問題っぽいな
2020/11/05 21:16:49 UTCshiro
#
>kaki 前者の問題には対応しました (update後make clean && makeが必要)
2020/11/05 22:38:48 UTCshiro
#
>kaki 後者の問題も対応