2

基本菜鸟问题:

我有需要懒惰地评估的数据,最常见的方法是制作一个thunks; 我习惯这样做的方式是这样的:

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

但是标准 ML 的每个指南都告诉我它是这样完成的:

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

所以我的问题是:这真的重要吗?输出不一样吗?制作一个函数和将一个 lambda 绑定到一个值之间有什么区别?

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 回答