Ocaml如何识别功能

时间:2014-12-10 20:29:21

标签: ocaml

我想编写Ocaml函数,它接受两个参数:其他函数(int-> int)和int值,然后以某种方式检查它是否与之前的参数一起使用。怎么做?

所以查看该问题的另一种方法是如何使用可变的标识来识别函数?

问题是:使函数g取函数f和int值n,而不是检查g是否已用于f为该值n,如果是,则返回先前得到的结果,否则将f计为n值。 f是int-> int

1 个答案:

答案 0 :(得分:1)

你需要改变你的想法:不要单独保留函数fg,而是gf转换为自己的记忆版本:

module IntMap = Map.Make (struct type t = int let compare a b = a - b end)

let g f =
    let m = ref (IntMap.empty) in
    fun x -> 
        try IntMap.find x !m
        with Not_found ->
           let r = f x in
           m := IntMap.add x r !m;
           r

显然值得做基准测试,看看计算的成本是否比记忆的成本更差。此外,最好使用Hashtbl代替Map(左侧作为练习)。