『ふつうのHaskellプログラミング』をテキストに、Haskellを学んでいます。
2007-05-21
■ 束縛

id:taninsw:20060614:p1 さんの「束縛」について
束縛とは代入ではなくて名前を付けているって感じなのかな。
値に名前を付けたり関数に名前を付けたりしてるだけ。
「ふつける」32ページには、
とあります。
変数が主ではなくて、値が主、という感じ?
値や関数は、それだけで名前がなくても存在しうる。
ということは、
値へのポインタを格納しているような感じでしょうか。
JavaScriptだと参照型のようなイメージでしょうか。
■ map 関数(1)

型
map :: (a -> b) -> [a] -> [b]
| 関数名 | map |
| 第1引数 | (a -> b) |
| 第2引数 | [a] |
| 返す値 | [b] |
JavaScriptのsort関数みたいな感じかな。
■ 変数の定義

第2章第2項...
まず、「main = ...」は変数mainの定義です。イコールの左の「main」が変数名で、右の「putStrLn "Hello, World!"」がその値です。
とありますが、ふつう、これって定義というか、変数の初期化ですよね。ところがhaskellでは値の再代入ができないので、これを定義というようです。でも再代入ができないなら、変数というより定数といったほうがよいのではないか? う~む。
変数mainの値が関数ではないことに注意してください。では何かというと、これはアクション(action)なのです。アクションもHaskellの値ですが、不思議なことに、その値を評価すると入出力などが実行されます。
ここ、なにがなんだかちっともわかりません。
ただ、いままで読んだところでは、変数の値には、
がありえるようです。
まだ読んではいないんですが、62ページの「値としての関数」というところに、
実は、Haskellで関数を定義するとは、こういうことです。つまり、関数名はすべて変数であって、その変数は関数に束縛されているのです。
頭がごちゃごちゃしてきます。でも、「値としての関数」という言葉、なんかもうちょっとでわかりそうな気がして、悩んでいたら、id:m_konishi1981:20061024 さんの記事を読んで開眼!
変数と説明には書いてあるけど、ようは
a = 3
というのは、常に3を返す関数を定義しているわけであって
たしかに、値を返すものを関数と呼ぶならば...
あ!
3を評価すると、3って返ってくるのでは!!
評価する対象に名前をつけてるだけなんだ。
で、こんな感じにまとめてみました。
■ 関数の型

関数にも種類があるのかな?
とおもって読み進んでみると、なんのことはない、どうやら関数の仮引数と返す値の型のようでした。
実は、Haskellには型推論(type inference)という機能があり、引数や返り値の型宣言を省略しても、言語処理系がその型を推論して補ってくれるのです。
(56ページ)とありますが、
型を宣言しておけば意図した通りに型がチェックされていることが確認できますし、ソースコードを読む人にとっての情報が増え、ソースコードが読みやすくなります。
(61ページ)ともあります。
書式は、
関数名 :: 仮引数の型 -> 返り値の型
第1章の冒頭にこうありました。
ということは、どんな関数でもこの書式で定義できるはずです。
仮引数がいくつもある場合は、繰り返して書けばよいようです。たとえば2つある場合は、
関数名 :: 第1仮引数の型 -> 第2仮引数の型 -> 返り値の型
返り値が2つ以上の場合はどうするのでしょう。この書式だと値は一つしか返せませんよね。もしかしたら配列(リストっていうのかな?)で返せばいいのかな?
Cami2012/01/06 12:23I'm out of league here. Too much brain power on dspilay!
wdfwjbasb2012/01/06 19:06Mc4Egc <a href="http://yhxozsgqumiv.com/">yhxozsgqumiv</a>
godmkkiypaz2012/01/09 23:38Uqzw8k <a href="http://ohmypzhyphqs.com/">ohmypzhyphqs</a>
prgnplsmbob2012/01/11 04:36mnBLIr , [url=http://bljmfmfrvxfu.com/]bljmfmfrvxfu[/url], [link=http://cmrclzzegoxg.com/]cmrclzzegoxg[/link], http://ucrrirxzzutz.com/