[Gauche-devel-jp] LL Weekend発表資料 「木のマッチ (マクロ万歳)」

Back to archive index

HIRAUCHI Hideyuki hira****@verys*****
2004年 7月 31日 (土) 15:24:59 JST


平内です。

LL Weekendの発表資料ですが、こんな感じにしようと思っています。
木のマッチをネタにマクロマンセーしようというのが狙いです。
何かおかしな点などありましたら、突っ込んでいただければ幸いです。
※明日中にこの内容をPDFにして、実行委員会に提出します。

- RELAX NG   http://www.kohsuke.org/relaxng/tutorial.ja.html
- util.match http://www.hadaly.org/fuyuki/gauche/doc/gauche-refj_316.html#SEC350

--hira

* 木のマッチ (マクロ万歳)
  2004/08/08
  LL Weekend
  hira****@verys*****

* 木のマッチ
  - Andrew Wright のパターンマッチングマクロライブラリ
  - Scheme界ではポピュラー (since 1995)

* パターンの記述力 (長所)
  ○ 木構造(入れ子)を表現できる
  ○ 要素毎に比較関数を設定できる
  ○ パターン変数に値をバインドできる (マクロパワーです)
  ○ 末尾要素の繰り返しが表現できる
  ○ パターンにand/or/notを適用できる

* パターンの記述力 (短所・期待はずれな所)
  × 繰り返しの上限が指定できない (?が表現できない)
  × 途中要素の繰り返しはできない (意外と不便)
  × グループ化ができない (これまた不便)

* 木のバリデータ(RELAX NG風)を実装してみた
  ○ サポートした機能
     - zeroOrMore  : *
     - oneOrMore   : +
     - optional    : ?
     - choice      : |
     - group       : ()
     - attribute

* 木のバリデータ(RELAX NG風)を実装してみた
  × サポートしなかった機能
     - 途中要素の繰り返し
     - interleave (elementの出現順序を規定しない)
     - その他難しそうな機能

* 実装の勘所
  - 基本的なマッチングは木のマッチで実現可能
  - attributeは値バインドと失敗継続で実装
  - optional,choice,groupはマクロで全展開
  - 「実装してみた」と言いつつ、実はまだ何もやってない。(8/1現在)
    (ちゃんと実装できたかどうかは、当日までのお楽しみ)

* マクロ万歳
  - パターン変数による値のバインドは強力
  - 言語をシームレスに拡張したと言える
  - こんなことが出来るのはマクロのおかげ
                    ↓
                マクロ万歳!





Gauche-devel-jp メーリングリストの案内
Back to archive index