【发布时间】:2020-02-10 23:28:59
【问题描述】:
我想编写一个具有内部状态的最小函数。
它应该有签名f: () -> (),并且第n次调用它应该打印数字n。
我认为 refs 是必要的,但我不知道如何使用它们来实现这样的功能。
【问题讨论】:
我想编写一个具有内部状态的最小函数。
它应该有签名f: () -> (),并且第n次调用它应该打印数字n。
我认为 refs 是必要的,但我不知道如何使用它们来实现这样的功能。
【问题讨论】:
我找到了一个带有外部本地参考的解决方案
local val mem = ref 0 in
fun f () =
let val _ = mem := !mem + 1 in print (Int.toString (!mem)) end
end
一个稍微不同的问题的解决方案是生成函数
fun iter_int n =
let val i = ref 0
in fn () =>
let val j = !i
in i := !i + 1 ; j
end
end
【讨论】: