首页 > 解决方案 > 具有内部状态的简单函数

问题描述

我想编写一个具有内部状态的最小函数。它应该有签名f: () -> (),并且它被调用的第 n 次应该打印数字 n。

我想 refs 是必要的,但我不知道如何使用它们来实现这样的功能。

标签: smlsmlnj

解决方案


我找到了一个带有外部本地参考的解决方案

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

推荐阅读