Gauche > Archives > 2019/02/23

2019/02/23 10:32:21 UTCshiro
#
次のリリースから、GAUCHE_KEYWORD_IS_SYMBOLの動作がデフォルトになります。(キーワードは自分自身に自動的に束縛されるシンボルになります)。これまでのデフォルト動作(キーワードはシンボルと異なる型の自己評価オブジェクト)を保つには環境変数GAUCHE_KEYWORD_DISJOINTを指定してください
#
現在のバージョン(0.9.7)でも、環境変数GAUCHE_KEYWORD_IS_SYMBOLが定義されていればキーワードはシンボルのサブタイプになるので、それで動作確認をしておいてもらえると移行時にトラブルを避けられると思います。
2019/02/23 11:39:45 UTCkaki
#
util.matchのキーワードパターンを試していて気付いたんですが、(match 42 (:a :a)) するとmatchが非衛生的なので拡張lambdaをうっかり使ってしまい、分かりにくいエラーになってしまいますね。
#
gosh> (macroexpand '(match 42 (:a :a)))
(let ((#:G341 42)) (let ((#:G342 (lambda (:a) :a))) (#:G342 #:G341)))
gosh> (match 42 (:a :a))
*** ERROR: invalid extended lambda list: (:a)
    While compiling: (match 42 (:a :a))
2019/02/23 12:14:48 UTCshiro
#
あーそうか。これにはもうひとつ、拡張lambdaはR7RS互換ではないという問題もあるのだよな(キーワードが引数に使えない)
2019/02/23 12:28:30 UTCshiro
#
R7RS lambdaはキーワードを引数に許すという変更をして、util.matchでR7RS lambdaを挿入するようにすれば当面は凌げるか。