4

ここに関数定義があります:

let f x = x + 3;;

ここに式があります:

let g = 4;;

g引数を取らない定数関数と考えることができますか? 違いはありますか?

4

3 に答える 3

5

の違い

let f() = expr

let f = expr

非純粋な言語では、前者の場合は「expr」の「効果」がすべての「呼び出しサイト」で実行され、後者の場合は定義サイトで1回だけ実行されます。これは、2つの間の非常に少数の違いの1つですが、おそらく最も重要です。

于 2009-09-20T17:54:54.527 に答える
5

はい-完全に機能的な観点から(Haskellで実践されているように)、すべてが機能です(実際にはすべて)。

また、純粋に関数型の言語ではいかなる種類の変更も許可されていないため、この定義には矛盾はありません。

違いはありますか?

ええと、OCamlは純粋関数型ではありません。これは、関数が定数値の定義とは少し異なる副作用を実行できることを意味します。

このコード(ここではF#ですが、Camlでは非常に似ています)は完全に有効です。

let name = 
    Console.Write("Enter your Name: ")
    Console.ReadLine()
于 2009-09-20T16:02:42.790 に答える
1

Technically, the definition of variables are pattern matches:

let [x] = someList
let y::zs = someList
let (Some z) = someOption
let _ = someIgnoredExpr
于 2009-09-20T17:30:08.740 に答える