Ch.7 MLプログラミング入門

§ 7.17. let式

MLプログラミングの基本は,種々の式を定義しそれらに名前を付け組み 合わせていくことです. これまで見てきた例では,名前はすべてトップレベルに記録されていま した. しかし,大きなプログラムでは,一時的に使用する多数の名前が必要と なり,それら名前を管理する必要があります. 例えばfactは,トップレベルに定義されたloopを使って定 義されていますが,この名前はfactの定義のためだけに導入されたもので あり,他の関数ではべつなループ関数が必要です. そこで,これら特定の処理にのみ必要な名前のスコープ(有効範囲)を 制限できれば,より整理され構造化されたコードとなります. そのために,以下のlet構文が用意されています.

expr  ::=
|let decl_list in expr end
decl  ::=val x = expr
|fun f p1 xn = expr

letinの間には,inendの式の中だけで有 効な宣言が書けます. 例えば,末尾再帰のfact関数は,通常以下のように定義します.

  fun factorial n =
    let
      fun loop (s,0) = s
        | loop (s, i) = loop(s * i, i - 1)
    in
      loop (1,n)
    end