みどりねこ日記

よくわからないけど、頑張りますよ。

2013-01-01から1年間の記事一覧

instaparseで遊ぶ

この記事はClojure Advent Calendar 2013 - Qiita [キータ]19日目の記事です。 instaparse 本記事ではinstaparseというライブラリを使って遊んでみます。 instaparseはEBNFやABNFで記述された文脈自由文法から自動的にパーサを生成してくれます。 左再帰、…

シリコンバレーいってきた

夏のインターンの関係で、シリコンバレー行ってきた。 すごいおいしいみたいな印象があったライスクリスピー、久しぶりに食べたらクッソまずかった。 けど友達にも「美味しいよこれ!!!」って言って買わせた手前、美味しいねこれ!って言いながら食べ続け…

macroless unless

(defn unless [test then else] (if test (else) (then))) (unless true #(println "hello") #(println "good bye")) good bye nil 素直にマクロ使おう。

Clojure:binding と遅延シーケンス

Clojure in Action読んでて、へえってなったのでメモ。 当然と言えば当然なのかもしれないけれど。 (def ^:dynamic *factor* 10) (defn multiply [x] (* x *factor*)) (map multiply [1 2 3]) (binding [*factor* 20] (map multiply [1 2 3])) Clojure の va…

夏休み

VOYAGE GROUPとDeNAインターンに参加した。 どちらも徹夜続きで死ぬかと思った。楽しかったけれど。 両方優勝することができたけれど、他チームと比べてダントツ!ってわけじゃなかったし、悔しい。 DeNAインターンの途中に楽天ハッカソンに参加して惨敗して…

パーサの連接とか

前回までに出てきた基本的なパーサをくっつけることで複雑なパーサが書けるわけですが、 今回はそのような連接とかを手助けしてくれるパーサコンビネータを紹介?します。 Kern のパーサコンビネータはシーケンス化、反復、選択、それと括弧の対応とかの面倒…

数字のパース

kern にはいくつか数値のパーサが用意されてて、これらは結果として文字列ではなく適切な数値型を返します。これらのパーサは名前空間 lexer 内のそれらに比べてサポートする数値型は少ないし、空白とかコメントとかもスキップしません。つまるところ、大き…

Kern のプリミティブパーサ

Kern にもプリミティブなパーサがあって、これらを組み合わせていくことで大きなパーサを作るというのが関数型らしいパーサの作り方なわけですが。 それらをちょっと見ていきます。 Kern けっこうかわいいわあ。 (use 'blancas.kern.core) return は常に成功…

Clojure の パーサコンビネータライブラリ Kern

Clojure でパースするとき、みんなどうしてるんだろう。 Parsec のようなものがあればいいのに〜、と思って探してみたところ、この Kern が一番よさげだった。 特徴 状態モナドベースのコンビネータ群 C, Java, Haskell, Shell の構文をサポート パースと式…