#gosh> (match '() ((or (x) (and x (not 42))) 'foo))
foo
gosh> (match '() ((or (and x (not 42)) (x)) 'foo))
*** ERROR: pair required, but got #f
While compiling: (match '() ((or (and x (not 42)) (x)) 'foo))
#orパターンの順番を変えただけでコンパイル時エラーになってしまいました。ところでこれマクロ展開時のエラーだと思ったんですが、マクロ展開時のスタックトレース的なものは得られないんでしょうか。
#マクロ展開のトレースはtrace-macroがあります。 http://practical-scheme.net/gauche/man?p=trace-macro でも今回のケースではトレース出ませんね。なんでだろう #ああそうか、最初の展開で失敗したらtrace-macroのトレース表示までいかないのか。
#matchの展開時のスタックトレースが出ないのは、util.matchがプリコンパイルされてるからだな。改めてlibsrc/util/matchをロードすれば出る。やっぱりプリコンパイルドなコードにもソース情報アタッチしないとつらいかな
#ただ今回の場合、matchの展開ルーチンは継続渡しで書いてあるからスタックトレース見てもいまいち