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

在SML中有多种书写thunk的方法吗?,sml,ml,thunk,Sml,Ml,Thunk,基本问题: 我有需要惰性评估的数据,最常用的方法是发出thunks;我习惯于这样做: fun someFunc () = let fun myThunk () = 2 + 2 in (* body *) end fun someFunc () = let val myThunk = fn () => 2 + 2 in (* body *) end 但是标准ML的每个指南都告诉我它是这样做的: fun someFunc () =

基本问题:

我有需要惰性评估的数据,最常用的方法是发出
thunk
s;我习惯于这样做:

fun someFunc () = 
  let
    fun myThunk () = 2 + 2
  in
    (* body *)
  end
fun someFunc () = 
  let
    val myThunk = fn () => 2 + 2
  in
    (* body *)
  end
但是标准ML的每个指南都告诉我它是这样做的:

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

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

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

因此


都将产生相同的结果。

在您的案例中没有明显的差异。
fun
关键字是
val rec
的语法糖,它确保您可以以递归方式引用要将函数绑定到的名称

因此

都将产生相同的结果