#直した (de1adfe)
#ひょっとしてGauche 0.9ってrun-processで:redirectsとかに対応していない?
#autoconfが古くてHEADが突っ込めないこの環境どうしてくれようか...(´・ω・`)
#HEADがビルドできる環境で ./DIST tgz して作ったソースツリーを持って行けばいいのでは?
#やってみます。
#(./DIST genしかしたことないのは内緒だ)
#できました。これでクラスタで動かすコードもlambdaとか書かないでよくなっちゃうのでちょっと嬉しい :^)
#ありがとうございます。
#gosh> (match 1 ((and 1 x) x))
1
gosh> (define-syntax foo (syntax-rules () ((_) (match 1 ((and 1 x) x)))))
#<undef>
gosh> (foo)
*** ERROR: Compile Error: syntax error in pattern (#<identifier user#and> 1 #<identifier user#x>)
#ぐぬぬ…hygienity…
##同じ原因ですが、対策漏れですね。
#こんなかんじかな
#diff --git a/libsrc/util/match.scm b/libsrc/util/match.scm
index 301f815..874b911 100644
--- a/libsrc/util/match.scm
+++ b/libsrc/util/match.scm
@@ -286,6 +286,11 @@
,@(car eb-errf))
,m))))
+(define (symbolize x)
+ (cond [(symbol? x) x]
+ [(identifier? x) (unwrap-syntax x)]
+ [else x]))
+
(define (pattern-var? x)
(and-let* ([x (cond [(symbol? x) x]
[(identifier? x) (unwrap-syntax x)]
@@ -335,7 +340,7 @@
((equal? p '_) '_)
((pattern-var? p) p)
((pair? p)
- (case (car p)
+ (case (symbolize (car p))
((quasiquote)
(if (and (pair? (cdr p)) (null? (cddr p)))
(quasi (cadr p))
#はやいとこマクロシステムを根本的に書き直さないとなあ