Haskellのlet whereの使い方【Haskell let where 変数宣言 局所的変数】H

変数宣言letの具体例

Haskellにおいて変数を宣言する方法は、letを使用する方法があります。

main = do
    let name = "田中太郎"
    print(name)

ちなみに、一つのletの中で複数の変数を宣言するには{}を使用します。

main = do
    let {name = "田中太郎"; id = 1000}
    print(name)
    print(id)

let構文

let構文の全体像は以下の通りです。

let { var1=value1 ; var2=value2; .. } in 式

または

do 
    let var1=value1;
    let var2=value2;

letで宣言した値を使用できるのは、同じdoブロックの中身か、letの後に使用するinの式内部のみです。 do内部での使用例は先ほど提示したばかりなので、inの具体例を提示します。

sphere r = let pi = 3.1415 in 4/3 * pi * r * r * r

main = do
    print(sphere(10)) -- 4188.666666666666 

上記の例では球体の体積を求める関数sphereを使用しています。

その際に、letコマンドを使用して円周率であるpiを定義しています。 このpisphere内部のみでしか使えません。

where句

上記のlet~in句は変数が先に宣言され、中身の関数は後ろに回されます。 しかし、ほとんどのシステムにおいては関数の中身こそが中心に来るべきであり、最初にメインの関数を表示し、内部で使用している変数を補助的に表示するほうが可読性が上がります。

これをサポートするのがwhere句であり、関数のボディが戦闘、関数内部の一時変数が後方に来るような構文になってます。

上記の球体を求める関数を、where句で置き換えてみましょう。

sphere r = 4/3 * pi * r * r * r
    where
        pi = 3.1415

main = do
    print(sphere(10))