(この章でのすべての例は、Haskellソースファイルで書かれていて、GHCもしくはHugsによりそのファイルは読み込まれ評価することが可能です。)
変数
前章では、どのようにして加算や減算のような簡単な算術演算子を使うのかということを学びました。簡単なクイズです:半径5cmの円の面積は?心配しないでください。間違ってもWikibookの幾何学で躓いてはいません。
円の面積は、πr^2で、ここでは、rは半径(5cm)で、πは簡単のために3.14とします。なので、GHCiで試してみましょう。
GHC Interactive, version 6.4.1, for Haskell 98.
http://www.haskell.org/ghc/
Type :? for help.
Loading package base-1.0 ... linking ... done.
Prelude>
考えて見ましょう。π(3.14)を半径の2乗にかけたいので、それは、次のようになります。
Prelude> 3.14 * 5^2
78.5
すばらしい!今、私たちの計算を助けてくれる素晴らしい、強力なコンピュータを持っているので、πを小数点2桁に近似する必要はまったくありません。同じことをしましょう。しかし、πの値は少し長くしています。
Prelude> 3.14159265358979323846264338327950 * (5 ^ 2)
78.53981633974483
よりよくなりました。なので、今、円の円周はどのくらいでしょうか(ヒント:2πr)?
Prelude> 2 * 3.14159265358979323846264338327950 * 5
31.41592653589793
もしくは、半径が25の異なった円の面積はどのくらいでしょうか(ヒント:πr^2)?
Prelude> 3.14159265358979323846264338327950 * (25 ^ 2)
1963.4954084936207
私たちがここで望むことは、遅かれ早かれ、あなたたちが、すべてのテキストをインタープリタに入力する(もしくは、コピー&ペーストする)ことに飽き始めているということです(あなたたちのいくらかは、コマンドラインで、上矢印とEmacsスタイルの切り取るキーバインドに気づいているでしょう)。私たちが主張するプログラミングにおける全体のポイントは、百万回も円周率の20桁を入力するような、愚かで、つまらない、繰り返しの作業を避けることです。私たちに必要なことは、円周率の値を記憶させる方法です。つまり、以下のようなことです。
Prelude> let pi = 3.14159265358979323846264338327950
ここで、文字通りにHaskellに"piは3.14159...に等しいものとする"と教えます。このことは、piが新しい変数であることを示します。この変数piは、今、数字が3.14159265358979323846264338327950であるということを定義しています。これは、非常に便利でしょう。なぜならば、piともう1度入力することで、保存した値を呼び出すことを意味するからです。
Prelude> pi
3.141592653589793
失われた桁すべてのことを心配しないでください。なぜなら、値を表示するときに、ただ飛ばしているだけだからです。すべての桁は、次の計算のいずれかで使われるでしょう。
変数を使うことは、いくつかの退屈なことを除くことです。では、半径5cmの円の面積は?半径25cmの場合は?
Prelude> pi * 5^2
78.53981633974483
Prelude> pi * 25^2
1963.4954084936207
この本で、私たちが"変数"と呼ぶものは、関数型プログラミングを紹介するために"シンボル"のようにしばしば言及されています。このことは、ほかの言語、すなわち、より有名な命令的な言語において変数は非常に異なった使い方をされているからです。つまり、状態の後をつけるということです。Haskellでの変数は、このようのことをしません。つまり、変数は値を記憶し、しかもその値は普遍の値です。
型
前の例の次に、半径の値を代入したいと思うでしょう。さあ、何が起きるか見てみましょう。
Prelude> let r = 25
Prelude> 2 * pi * r
<interactive>:1:9:
Couldn't match `Double' against `Integer'
Expected type: Double
Inferred type: Integer
In the second argument of `(*)', namely `r'
In the definition of `it': it = (2 * pi) * r
おっと!あなたたちは、ちょうど型として知られたプログラミングの概念に出くわしました。
関数
関数の中の関数
最終更新:2007年03月24日 22:05