Haskell

Stateモナドを絵を描いて理解してみた

絵を描きながらStateモナドを考えてみたら意外とうまくいったので紹介します。 Stateモナドには「表の値」と「裏の値=状態」という2つの値(型)が登場します。 Stateモナドの定義です。(s -> (a,s))で、sが状態の型、aが表の値の型です。 newtype State s a =…

Newton法

Haskellをマスターして悟り体験をしたいというのはあるんだけど、遠い夢より現実的な用途として、アルゴリズムのメモがわりにHaskellは使えないかなと。qsortとかみたいに。実際に動作するメモ。 で、Newton法を適当に書いた。 eps = 1e-7 newton f f' x = i…

不動点演算子

昨日のYコンビネータを考えてるときに気がついたことをメモ。 準備として、不動点演算子とは、任意の関数fに対して Y(f) == f(Y(f))を満たすYのこと*1。 *1:たぶん

動作

ヨタ。 昨日の「動作」と「動作の実行」を区別するってのを考えてたら、太極拳とか思った。

IOのメモ

http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/haskell_io.htmlを読んでのメモ。 関数型みたいに関数が第一級の対象だと、「関数そのもの」と「関数を適用すること」が区別されてる。fとf(x)は別物。「関数そのもの」を直接指定するにはlambdaを使えば…

リストがモナドであることを確かめてみた。

きっかけは、モナドの定義とか - 檜山正幸のキマイラ飼育記 (はてなBlog)あたりが分かったような分からないようなもやもやした気分になったから。 わからないのは一方的にこっちの勉強が足りないからなので、考えてみることにした。 とりあえず、リストは本…

副作用

LL Ringで山下さんが「副作用はモナドを使わなくても書ける」と言ってたけど、どうやるんだろうかと気になる。

モナドの例がパイプそのまんま

ふつけるのMaybeモナドの例*1とUnixパイプが同じ形だなという発見。 lookup "database" config >>= lookup "encoding" -- Maybeモナドの例 grep "database" config | grep "encoding" -- Unix系のコマンドラインでgrepをパイプでつないだもの">>="と"|"がそ…

モナドは予想以上に手ごわい

ここしばらく調べたり考えたりしてるけど、山を越えたらまた山があった。 その先にももう一山あるのは分かってるから、うーん大変だ。

リスト

リストって自由半群…というか、モノイドだったのね。

リストのネストの深さ

例えば、Double のリストのリストのリストの…、と何重かに入れ子になったリストに対して、入れ子の深さを計算する関数は書けるのか?そういう関数があれば、引数の型はなんになるのか?確定しないからダメな気がする。 でも、多重リスト自体は実際存在するし…

Haskell 始めてみる(08)

3関数より。 add :: Integer -> Integer -> Integer add x y = x + yこれは、カリー化(curry)された関数の一例です。アンカリー化(uncurry)された関数をえるには、タプルを使います。 add (x,y) = x + y カリー化された関数、アンカリー化された関数という表…

Haskell 始めてみる(07)

A Gentle Introduction to Haskell: Values and Types が少し残っているけど、すっ飛ばして次の A Gentle Introduction to Haskell: Functions に進む。

Haskell 始めてみる(06)

再帰型より。 型は再帰的に構成することもできます。たとえば、二分木の型を考えてみましょう。 data Tree a = Leaf a | Branch (Tree a) (Tree a) ここでは多相型の二分木を定義しました。その要素はa型の値を含む「葉」のノードかあるいは(再帰的に)ふたつ…

Haskell 始めてみる(05)

間があいた。 引数のある場合の data 宣言。 基本的に引数なしと変わらない。 data Point a = Pt a a pt1 = Pt 3.0 4.9 pt2 = Pt 3.0相変わらず Pt の定義は気にしない。Point 型の値を作るには、2 行目のように書く。Pt は Point 型の値を作るための符牒だ…

Haskell 始めてみる(04)

雑談。 結城浩さんが Haskell の勉強日記を始めてますね。 ん?結城さんは結構前に Haskell やってたような気が…。 スタートからぐーんと差がついちゃってるなあ。残念。 まあ、同時に始めたところであっという間に差がついてしまうわけだけど。http://comps…

Haskell 始めてみる(03)

型構築子 / データ構築子 A Gentle Introduction to Haskell: Values and Typesより。 Haskellではdata 宣言を使って、ユーザ自身が型を定義することができます。 data Bool = False | True 型 Bool は(無引数) 型構築子の例です。また、True や False は(無…

Haskell 始めてみる(02)

はすける Haskell で遊ぶ | Netsphere Laboratoriesより。 予約語 case class data default deriving do else if import in infix infixl infixr instance let module newtype of then type where _ これだけ。大文字・小文字を区別する。 22 個。少なくてう…

Haskell 始めてみる(01)

The Haskell 98 Report: Introductionより。 Haskell プログラムの大雑把な構成 Haskell プログラムは、モジュールの集まり モジュールは、宣言の集まり 宣言は、式の集まり Haskell の名前は 6 種類 変数名 (値を表す。) 構築子名 (値を表す。大文字始まり)…