【问题标题】:Simple function with internal state具有内部状态的简单函数
【发布时间】:2020-02-10 23:28:59
【问题描述】:

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

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

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

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

    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
    

    【讨论】:

    • 谢谢,我还发现了一个对我来说实际上效果更好的解决方案,但我认为您的评论帮助我了解了本地 :)
    • 我相信您的第二种解决方案是更常见的一种,如果您想要多个生成器,它也是唯一可行的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多