基本的菜鸟问题:
我需要懒惰地评估数据,最常见的方法是制作thunk
s;我习惯这样做的方式是这样的:
fun someFunc () =
let
fun myThunk () = 2 + 2
in
(* body *)
end
但是标准ML的每一个指南都告诉我它是这样完成的:
fun someFunc () =
let
val myThunk = fn () => 2 + 2
in
(* body *)
end
所以我的问题是:它真的重要吗?反正输出不是一样的吗?并且创建函数和将lambda绑定到值之间有什么区别?
答案 0 :(得分:4)
您的案件没有明显的区别。 fun
关键字是val rec
的语法糖,它确保您可以以递归方式引用绑定函数的名称。
因此
fun myThunk () = 2 + 2
val rec myThunk = fn () => 2 + 2
val myThunk = fn () => 2 + 2
将产生相同的结果。