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

関数の合成の誤解

さて、先日のポストで書いたコードなんですが、 pure f pure g (ZipList xs) これ、コンパイルエラーがでます。前にもこんな様なコードを書いておこられて、はっきりとした理由がわからないままあきらめていたのですが、今回理由がわかったので書いておきま…

Haskellの再帰とCのループの違い

今日は、Haskellでのmapについて少し考えてみたいと思います。 Cでこんなコードを書いてみます: void foo() { int rg[10]={}; int i; for (i = 0; i この関数fooにはループが4つありますね...一つ目は配列rgの中身を初期化してます。2つ目と3つ目は各要素…

IO+Maybe=?

Haskellについては、まだまだわからないことがいっぱいあるのですが、少しコードが書けるようになってきたころに躓いていたことがあります。Maybeモナドのことです。どこで知ったかは忘れてしまいましたが、Maybeは処理の中断をうまく表現できるので、C言語…

Monoidのこと

昨日のポストで取り上げた変わった型のApplicativeの2つ目: instance Monoid a => Applicative ( (,) a) where pure x = (mempty, x) (u, f) (v, x) = (u `mappend` v, f x) はMonoidが出てきます。今までかかわったことがなかったのですが、定義を見てみ…

Applicativeの変わった仲間たち

Applicativeネタ、つきません...ほかにも見るところ、いっぱいあるんですが…ということで、コレハ、いったい、どう読めば良いのでしょう: instance Applicative ( (->) a) where pure = const () f g x = f x (g x) instance Monoid a => Applicative ( (,)…

リストの自由度

Haskellのリストの自由度のこと、ちょっと見直してみました。 リストの決まりごとは:同じ型の要素しか保持できない。 [1, 2, 3] -- ok [1, 'a', 3.4] -- NG 逆に、型が同じであればいくつあってもかまわない。 [ ], [1], [2, 3], [1..] :: [Int]この2つの…

Applicativeを使ってみる

ということで、まだまだ先はありますが、Applicativeの使い方が少し見えてきました。mapでこうやることが: map (+ 1) [1, 2, 3] = [2, 3, 4]Applicativeだとこうできる: pure (+1) [1, 2, 3] = [2, 3, 4]いくつのリストを対象に関数を適用するかで、map = …