変数束縛

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2008-04-07 (月) 15:15:50

関数型言語の比較

OCaml

let var = value の形式で束縛します。対話環境でも使用できます。

let x = 1;;

関数は、 let f args = ... の形式で宣言します。 これは let f = fun args -> ... のシンタックスシュガーです。

let f x = x;;

ただし、再帰的な関数を定義するには、let recが必要になります。

let rec fact n = if n = 0 then 1 else n * fact (n-1);;

OCaml 3.07以降では、関数値以外でも再帰的に定義することが可能になりました。

let rec a = 1 :: a;;  (* [1; 1; 1; 1; 1; ... ] と無限に続くリスト *)

SML

val var = value の形式で束縛します。対話環境でも使用できます。

val x = 1;

関数は、 fun f arg = ... の形式で宣言します。 これは val f = fn args => ...のシンタックスシュガーです。

fun f x = x;

OCamlと異なり、再帰的な関数を定義する際、特別なキーワードは不要です。

fun fact n = if n = 0 then 1 else n * fact (n-1);

Haskell

var = value の形式で束縛できます。 Hugsの対話環境では使用できません。GHCの場合、let x = 1のようにすることで、束縛できます。

x = 1

関数はf args = ... の形式で宣言します。これは f = \args -> ... のシンタックスシュガーです。

f x = x

再帰的定義も特別なキーワードは必要としません。

fact n = if n == 0 then 1 else n * fact (n-1)

新規 編集 添付