2008-02-01から1ヶ月間の記事一覧

Applicative勉強中:Applicativeとモナド

昨日はリストへの関数適用からApplicativeパターンを見つけるところまでやりました。でも、GoFもいうように、パターンといわれるからには、あちこちで似たような用例が見つからないとおかしいですよね...論文では、リストのほかにモナドも例として取り上げて…

Applicative勉強中:Applicativeパターン

さて、昨日のtransposeなのですが、 transpose :: [ [a ] ] -> [ [a ] ] transpose [ ] = repeat [ ] transpose (xs : xss) = zipWith (:) xs (transpose xss) これは、つまりtranspose [ [1, 2, 3], [4, 5, 6] ]を [1, 2, 3] `zipWith (:)` [4, 5, 6] `zipW…

Applicative論文で見かけたもの その2

本題のApplicativeからはちょっと離れるのですが、ひきつづき、Applicativeの論文で見かけたもののことを書きます。導入部の例として、行列の転置、Transposeが取り上げられていました。そのインプリメンテーションがかっこいいので思わずうなってしまいまし…

Applicative勉強中

ちょっと前から、時間を見つけてはApplicativeについての論文を読んでいます。まだいくつか(も)疑問点が残っているので、まだまだ説明はできないのですが、いくつか面白いことが出ていたので...小出しに書いていこうと思います。概要としては、Applicative…

ポスト内のコードが化ける...

最近気づいたことなのですが、どうやらコード内で空リスト[ ]や[ [ ] ]などがあると、何かほかのものに変換されてしまうようです。気がついたときは間にスペースを入れるようにしているのですが、忘れます。はてな記法一覧を見るとはてなリンクの強制解除と…

ちょっと変わったリストのトラバースはunfoldrでできる

昨日作ってみたvarMapなのですが、コメントでData.List.unfoldrの存在を教えてもらいました。 unfoldr :: (b -> Maybe (a, b)) -> b -> [a] unfoldr f b = case f b of Just (a,new_b) -> a : unfoldr f new_b Nothing -> [] ということで、unfoldrの入力は…

ちょっと変わったリストのトラバース

Haskellではmapとかfoldl, foldrとか先日のポストへのコメントで教えてもらったmapAccumLやモナドを使ったmapMなどいろんなリストのトラバースの仕方が提供されています。のですが、試しに書いていたCUIのTicTacToe(マルバツですね)のなかで、ライブラリに…

MonadIOクラスのこと

昨日のモナドトランスフォーマーの勉強中に使ったliftIOですが、勘違いをしていたことにやっと気がつきました。liftIOの型情報は liftIO :: IO a -> m a と、この関数だけ見るとIOアクションをほかのどんな形のモナドにでも挿げ替えてくれるハッキーな関数の…

モナドを重ねる

えー、今日はモナドトランスフォーマーの一種StateTについて勉強してみました。参考にしたのはここら辺です。モナドは実際に行われることの一つの面についての上手に抽象化してくれるのですが、一つ一つのことが別々のモナドで実現されているので、ステート…

ITPro連載:本物のプログラマはHaskellを使う

こちらのshelarcyさんによる連載、僕にはとてもためになってます。あちこち調べまわってゴリゴリ考えてHaskellを解き進むのもそれはそれで面白いのですが、こちらでは網羅的に、でも実用の妨げになる端折りもなくHaskellのことが説明されているように思いま…

風邪にてダウン

してしまいました。こんな記事を見つけました。モナド(monad)とFunctorの関係…興味あります。 http://itpro.nikkeibp.co.jp/article/COLUMN/20061005/249933/

コンテキストつきmapとStateモナドのこと

[a]があって、それにある関数 f :: a -> b -> (c, b) をマップして[c]を得たい。ここで、bはマップ開始時の初期値は決まっているけど、それから先はマップの各回によって新しいbの値が生成される。こんなようなコードを書く必要があるときがありました。き…

学術論文やその他のライセンス下の情報をブログから参照するときの注意点

Haskell関係の情報をインターネットで探していると、さまざまなライセンスの元で公開されているものが見かけられるのですが、そういった情報を自分のブログの記事で参照する時に注意するべき点についてどなたかご存知の方おらられますでしょうか?もし何かア…

モナドと実行順序のこと、結末

kazu-yamamotoさんの http://d.hatena.ne.jp/kazu-yamamoto/20080212/1202793403 に導かれてnobsunさんの http://haskell.g.hatena.ne.jp/nobsun/20060907/monadicIO http://haskell.g.hatena.ne.jp/nobsun/20060908 の2つの記事をざっと読みました。nobsun…

モナドと実行順序のこと

kazu-yamamotoさんのコメントいただいて、モナドの実行順序関連の振る舞いについて考えてみました。 bind (>>=) が、右辺を実行する前に左辺を実行し終えるかについて。リストもモナドなことは前回にも述べましたが、リストのモナドインスタンスの実装は以下…

モナドのこと

kazu-yamamotoさんのhttp://d.hatena.ne.jp/kazu-yamamoto/20080208/1202456329に勝手に刺激されて、はてなダイアリーはじめました。 これまでHaskellを勉強してきて、自分なりのモナドの理解をまとめようと思って…最初はkazuさんのブログにコメントを長々と…

はじめました

前からやってみたほうがいいなー、やってみようかなーと思いながら、踏ん切りがついていなかった。今までは読む一方だった「あどけない話」さんのところに長々コメントしてしまったので、これを機会にと思い、取り急ぎ…