Gauche > Archives > 2012/04/12

2012/04/12 03:20:51 UTCshiro
#
直した (de1adfe)
2012/04/12 08:53:54 UTCmaru
#
ひょっとしてGauche 0.9ってrun-processで:redirectsとかに対応していない?
#
autoconfが古くてHEADが突っ込めないこの環境どうしてくれようか...(´・ω・`)
2012/04/12 08:58:35 UTC(び)
#
HEADがビルドできる環境で ./DIST tgz して作ったソースツリーを持って行けばいいのでは?
2012/04/12 08:59:23 UTCmaru
#
やってみます。
#
(./DIST genしかしたことないのは内緒だ)
2012/04/12 09:09:10 UTCmaru
#
できました。これでクラスタで動かすコードもlambdaとか書かないでよくなっちゃうのでちょっと嬉しい :^)
#
ありがとうございます。
2012/04/12 23:42:42 UTCkaki
#
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>)
2012/04/12 23:47:48 UTCshiro
#
ぐぬぬ…hygienity…
2012/04/12 23:47:54 UTCkaki
#
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aBugs%3alog9#H-e3ux7n の関連でしょうか.あっちのは今は動くようになってますが.
2012/04/12 23:50:40 UTCshiro
#
同じ原因ですが、対策漏れですね。
#
こんなかんじかな
#
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))
#
はやいとこマクロシステムを根本的に書き直さないとなあ