在SML中有多种编写thunk的方法吗?

时间:2013-09-17 21:06:26

标签: sml ml thunk

基本的菜鸟问题:

我需要懒惰地评估数据,最常见的方法是制作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绑定到值之间有什么区别?

1 个答案:

答案 0 :(得分:4)

您的案件没有明显的区别。 fun关键字是val rec的语法糖,它确保您可以以递归方式引用绑定函数的名称。

因此

fun myThunk () = 2 + 2

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

val myThunk = fn () => 2 + 2

将产生相同的结果。