#$ env | grep GAUCHE_KEYWORD_IS_SYMBO
GAUCHE_KEYWORD_IS_SYMBO=1
$ gosh -r7
gosh[r7rs.user]> (import (srfi 35))
gosh[r7rs.user]> (define-condition-type foo &condition foo? (x foo-x))
*** ERROR: unbound variable: :name
Stack Trace:
_______________________________________
0 :name
[unknown location]
1 (make <condition-meta> :name 'foo :supers (list &condition) : ...
[unknown location]
$ unset GAUCHE_KEYWORD_IS_SYMBOL
$ gosh -r7
gosh[r7rs.user]> (import (srfi 35))
gosh[r7rs.user]> (define-condition-type foo &condition foo? (x foo-x))
*** ERROR: unbound variable: current-module
Stack Trace:
_______________________________________
0 (current-module)
[unknown location]
1 (current-module)
[unknown location]
2 (make <condition-meta> :name 'foo :supers (list &condition) : ...
[unknown location]
#R7RSスタイルで (import (srfi 35)) すると define-condition-type がエラーになってしまいます。GAUCHE_KEYWORD_IS_SYMBOLによってエラーの内容は変わりますが、importに (gauche base) を足すことで回避できるようです。
#GAUCHE_KEYWORD_IS_SYMBOL=1 で (gauche keyword) だと結局 *** ERROR: unbound variable: current-module です。
#そういえば、define-classも衛生的じゃなかった気がします。
#$ gosh -r7
gosh[r7rs.user]> (import (only (gauche base) define-class))
gosh[r7rs.user]> (define-class <bar> () ())
*** ERROR: unbound variable: current-module
#そっか。(1)keywordもrenamingの対象にする必要がある(2)define-classがcurrent-moduleをrenaming無しで挿入してる、の2点かな
#衛生的マクロの不透明感への拒否反応って自分も持ってたけどアドホックな対応を積み重ねたコードがコーナーケースではまるとやっぱり根本的に綺麗な設計にしとかないとだめだよなあってなる。
#直してみました >kaki