MEMO:はてな支店 このページをアンテナに追加 RSSフィード

2009-02-27

[]util.matchの展開結果

すごい。

実際にexprの中身とマッチするかどうかを順に試していく、という方法ではなくて、

マッチさせるとしたらこういう処理になる、というプログラム自体を生成していたとは。

(出力結果は見やすいように整形した)

gosh> (use util.match)
gosh> gosh> (macroexpand '(match expr (() ()) (((x y) z) x)))
(if (null? expr)
  ((lambda () ()))
  (if (and (pair? expr)
           (pair? (car expr))
           (pair? (cdar expr))
           (null? (cddar expr))
           (pair? (cdr expr))
           (null? (cddr expr)))
    ((lambda (x y z) x)
     (caar expr)
     (cadar expr)
     (cadr expr))
    (match:error expr)))

ここにも驚いた人が。

[Gauche-devel-jp] util.match

;; 追いかけようと思って macroexpand に上記の match 式を喰わせたら

;; くらくらしました ;-)

http://lists.sourceforge.jp/mailman/archives/gauche-devel-jp/2006-September/001673.html

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/katona/20090227/p3