Gauche:パターンマッチング
yamasushi(2013/04/20 08:31:25 UTC)パターンマッチングについての情報をまとめてみます。
- 概要
- パターンマッチは正規表現ではない - karetta.jp
http://karetta.jp/book-node/gauche-hacks/011894
- パターンマッチは正規表現ではない - karetta.jp
- 解説
- Andrew Wright's pattern matching system
http://download.plt-scheme.org/doc/103p1/pdf/match.pdf
- Andrew Wright's pattern matching system
- Guile Reference Manual: Pattern Matching
http://www.gnu.org/software/guile/manual/html_node/Pattern-Matching.html
- The Racket Reference: Pattern Matching
http://docs.racket-lang.org/reference/match.html
- Pattern matching - The Chicken Scheme wiki
http://wiki.call-cc.org/man/3/Pattern%20matching
- matchable - The Chicken Scheme wiki
http://wiki.call-cc.org/eggref/4/matchable
- チュートリアル
- An Introduction To Lispy Pattern Matching - ceaude
http://ceaude.twoticketsplease.de/articles/an-introduction-to-lispy-pattern-matching.html
I hope this article serves well as an introduction to match. It is one of my favorite Scheme forms and it is very popular in general, too: According to the current Salmonella reverse dependency ranking, the matchable egg is the most depended on egg in all of Chicken!
- An Introduction To Lispy Pattern Matching - ceaude
- Scheme:初心者の質問箱:log00
equal?で比較するcase
caseシンタックスは、キーと一致するclauseを判定するのにeqv?を使いますが、eqv?ではなくequal?が必要なときはどうしたらいいでしょうか? もちろんcondを使って、自分でcondのtest clauseにequal?を並べることはできますが、(1)キーの生成に副作用がある場合にはプログラマが明示的にローカル変数を作らないといけない、(2)副作用がないとしても同じキーを並べるのが面倒、という理由で、equal?で比較するcaseがあると便利だと思うのですが。自分でシンタックスを追加してもいいとはいえ、そういうものが標準で用意されていないのは、なにかいいやり方が別にあるから?
Shiro(2005/09/24 02:02:16 PDT): いえ、たぶん必要ならマクロですぐ書けるけれど 標準にするほどには頻繁に必要とされない(もしくは一般化しにくい)、 という理由なんではないかと推測します。 ちなみにutil.matchを使えば似たようなことが出来ます。Scheme的には 「どうせやるならこのくらいまで一般化したい」という心理が働くのかも。
(match var ((or "abc" "def" "ghi") ....) ;;; 文字列のいずれかにマッチ ((or '(abc) '(def) '(ghi)) ...) ;;; リテラルリストにマッチ )
- Gaucheのutil.matchを勉強してみる - 計算機と戯れる日々
http://d.hatena.ne.jp/n9d/20071121/1195629701
http://d.hatena.ne.jp/n9d/20071122/1195710432
- Gaucheで小町算にチャレンジ - noriok's diary
http://noriok.hatenablog.com/entry/2013/01/06/021054
- Scheme:テキスト処理
(use srfi-13) (use util.match) (define main (match-lambda ((program filename) (with-input-from-file filename (cut port-for-each (lambda (line) (print (string-trim-right (or (string-scan line #\; 'before) line)))) read-line)) 0) ((program . _) (print "Usage: " program " <filename>") 1)))
- Island Life - Gaucheで書き捨てツールのtips
http://blog.practical-scheme.net/shiro?20120129-gauche-tips
コマンドライン引数の扱いは、オプションをlet-argsでパーズした後、残りの引数に matchをかける、っていうのをよくやる。
(use gauche.parseopt) (use util.match) (define (main args) (let-args (cdr args) ([#f "h|help" => (cut usage 0)] . args) (match args [(file) ...処理...] [_ (usage 1)])))
- Gauche でパターンマッチ - sirocco の書いてもすぐに忘れるメモ
http://d.hatena.ne.jp/sirocco/20100424/1272112679
- 階乗 - My Snippet
http://my-snippet.appspot.com/snippet/show/6012
- フィボナッチ数 - My Snippet
http://my-snippet.appspot.com/snippet/show/2031
- Haskellの表記をGaucheと併せて比べてみる。 - 計算機と戯れる日々
http://d.hatena.ne.jp/n9d/20071123/1195821592
- secd machine と util.match - cranebirdの日記
http://d.hatena.ne.jp/cranebird/20090901/1251773859
- Gaucheのパターンマッチを使いやすくするマクロを作った。 - 自称スーパーハッカーの適当なプログラミング雑記等
http://d.hatena.ne.jp/tana-laevatein/20100729/1280412359
- gaucheでmarkdown-parserを作ってみる (途中 buggy) - podhmoの日記
http://d.hatena.ne.jp/podhmo/20101109/1289311331
- MatchingStructFieldsByName - Cookbook - schematics:cookbook
http://schemecookbook.org/Cookbook/MatchingStructFieldsByName
- その他
- util.matchの展開結果 - MEMO:はてな支店
http://d.hatena.ne.jp/katona/20090227/p3
- util.matchの展開結果 - MEMO:はてな支店
- gauche util.match メモ - cranebirdの日記
http://d.hatena.ne.jp/cranebird/20100603/1275575606
- Gauche の util.match で効率よく木をマッチさせるには? - QA@IT
http://qa.atmarkit.co.jp/q/2124
Tag: util.match