みどりねこ日記スマートフォン用の表示で見るみどりねこ日記よくわからないけど、頑張りますよ。[キータ]19日目の記事です。instaparse本記事ではinstaparseというライブラリを使って遊んでみます。instaparseはEBNFやABNFで記述された文脈自由文法から自動的にパーサを生成してくれます。いかなる文脈自由文法でも動作します。生成されたパーサは文字列からenliveまたはhiccup風の木構造を生成します。今回は型なしラムダ計算を題材にします。型なしラムダ計算は、型がない(または型がひとつしかない)ラムダ計算です。ラムダ計算はとてもシンプルで、すべての計算が関数定義と関数適用だけで実現可能です。ラムダ計算の構文は以下の3つからなります。定義くらいはほしいだろう、ということで、今回作るパーサは以下のような拡張をした構文にします。exprさて、上の構文を用いてパーサを作ってみます。"))簡単に書けました。実行すると以下のような結果が得られます。"x"]]]]]驚きのお手軽感です。お分かりかとは思いますが、langやdefなどがキーとなった木(ベクタ)ができています。>で囲まれたexprやwは出力結果にはありません。>はパース結果を隠す役割があります。他にも正規表現が使えたりと大変便利なライブラリです。パース結果をグラフ化することもできます。"sample.lambda")))せっかくパーサができたので評価できるようにします。実装にあたってはこの辺とかこの辺を参考にしました。α変換...本来だと条件によって置換しなくてもいいこともある。面倒だし、全部置き換えたところで一緒なので全部置換することにします。yのように変換します。そのようにすれば適用する式の中身と変数名がかぶりませんね。HaskellやOCamlみたいなパターンマッチがClojureにもあったらなーと思っていたら、clojure.core.matchがなかなか良さそうなので使ってみました。results))Clojureすごい!instaparseすごい!というわけで、19日目はこれでおしまいです。Action読んでて、へえってなったのでメモ。当然と...2012-05-01Scalaは関数型プログラミング言語ではない面白い記事があったので翻訳してみました。»プロフィールid:paprikasよくわからないけど、頑張りますよ。(2)月別アーカイブはてなブログをはじめよう!paprikasさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。