Written June 10, 2013 Note: before reading this, you should know what a monad is. Read this post if you don't! Here's a function half: And we can apply it a couple of times:
30分プログラム、その663。Readerモナドを試してみました。 The Reader monadを読んでたら、環境がどうのこうの書いてあったので、簡単なプログラミング言語を作ってみました。環境が使いたかっただけなので、変数束縛と変数参照のほかには、整数リテラルと加算演算子ぐらいしかありません。 前に読んだHaskellの入門書には「複数の関数で引数を共有したいときはReaderモナドを使うといいよー」と書いてあったけど、微妙に違う気がする。共有できるのは引数一個だけだし、共有してる変数を書き換えることもできるし。 使い方 *Main> runEval $ Int 40 `Add` Int 2 42 *Main> runEval $ Let ("x",Int 1) $ Int 4 `Add` Var "x" 5 ソースコード import Control.Monad.Reader dat
モナドの合成はさっぱりわからないままだったので、試しにReaderモナドとWriterモナドの合成をやってみた。 リーフは数値、ブランチにはラベルがついてる木構造データを対象に、 木構造データのリーフの合計を求める関数 さらに、Writerモナドを使って足したリーフの数字を順番にログにとる関数 さらに、Readerモナドを使って親のラベルもログに取る関数 の順番で変更が少ないように実装してみたつもり。それぞれmain1,main2,main3に対応する。これでちゃんと動く理屈はあまりちゃんとわかってない。わかったら後で書く。 以下ソース data T = B String [T] | L Int sample = B "root" [L 5,B "child" [L 1,L 10],L 2] -- main1 = sum_leaf sample sum_leaf (L n) = n sum
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く