2

基本的な初心者の質問:

遅延評価する必要があるデータがあります。これを行う最も一般的な方法は、thunks;を作成することです。私が慣れている方法は次のようなものです:

fun someFunc () = 
  let
    fun myThunk () = 2 + 2
  in
    (* body *)
  end

しかし、Standard ML のすべてのガイドでは、次のように行われていると教えてくれます。

fun someFunc () = 
  let
    val myThunk = fn () => 2 + 2
  in
    (* body *)
  end

だから私の質問は:それは本当に重要ですか?とにかく出力は同じではありませんか?関数を作成することと、ラムダを値にバインドすることの違いは何ですか?

4

1 に答える 1

4

あなたの場合、顕著な違いはありません。キーワードはのfunシンタックス シュガーですval rec。これにより、関数をバインドする名前を再帰的に参照できるようになります。

したがって

fun myThunk () = 2 + 2

val rec myThunk = fn () => 2 + 2

val myThunk = fn () => 2 + 2

すべて同じ結果になります。

于 2013-09-17T23:58:54.363 に答える