Saturday 3 August 2013

Haskell 入門! (3)

Haskell 入門企画第3回.

en.wikibooks の Haskell (pdf version) より.
CC-BY-SA での配布.

今回は重大発表があります↓


Variables in imperative languages

大事なこと言います.
Haskell では,変数の値は変化しない.
もう一度言います.
Variables do not vary.
大事なことだから三回目

_人人人人人人人人人人人人_
> 変数の値は変化しない <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

な,なんだってーーーーーー!!

DoubleDeclarations.hs
a = 3
a = 5

Prelude> :l DoubleDeclarations.hs 
[1 of 1] Compiling Main             ( DoubleDeclarations.hs, interpreted )

DoubleDeclarations.hs:2:1:
    Multiple declarations of `a'
    Declared at: DoubleDeclarations.hs:1:1
                 DoubleDeclarations.hs:2:1
Failed, modules loaded: none. 
Multiple declarations of `a'.
a が2回定義されてるやん,おかしいやん,って言われてしまいました.
ちなみにこのように ghci のエラー表示は非常に親切かつ賢くて,丁寧に読むとかなり色々わかります,
これ,命令型言語なら, 1行目で a っていう ''箱'' に 3 が入り, 2行目で 5 になる,と読むところですが,
我らが純粋関数型言語では,そうはならないわけです.数学で a = 3 って書いた時みたい.
こんなのも: foo.hs (ファイル名面倒になった)
a = 3
a = a+1
(これが動かないだと…!!)
これは a の increment ではなく, a の再帰定義とみなされます.

これで直ちに嬉しいことの一つが,変数定義の順番を気にしなくて良いこと.
y = x*2
x = 3

x = 3
y = x*2
は同じ.もちろん y を実際に使うときには x の値が必要になりますが,
そうして実際の特定の数値が必要になるまでは,べつに重要ではないというわけです.
でもそれどうするんですか, for 文 loop とかどうすればいいんですか.
→わくわくですよね.とにかく,ほんとにこれでうまく行くらしい. Haskell かっこいい.
だいたい再帰とかそういう色々でやるみたいです.
実は,僕が Haskell をもうちょっとやろうと思った決定的な瞬間がこのあたりだったりします.
すごくかっこよくて,すごく気持ちよさそう.もっと知りたいな,と思いました.それでいま勉強中.

en.wikibooks から引用:
By now, you probably look very incredulous and wonder how you can actually do anything at all in Haskell where variables don't change. But trust us; as we hope to show you in the rest of this book, you can write every program under the sun without ever changing a single variable! In fact, variables that don't change make life so much easier because it makes programs much more predictable. It's a key feature of purely functional programming, not a bug.

No comments:

Post a Comment