Ocaml定点实施

pau*_*ago 1 ocaml fixed-point-iteration

我试图弄清楚如何在Ocaml中实现定点迭代。也就是说,给定一个函数f和一个x,我想计算最终值是多少f(f(f(x)...))

因此,例如,如果我的函数是x/2和my x=50,我的答案应该为0。

到目前为止,我有

 let rec computed_fixed_point eq f x =
        if (x == f x) then 
            x
        else
            computed_fixed_point eq f (f x)
Run Code Online (Sandbox Code Playgroud)

这适用于函数x/2x=50(给我0),但是对于变为无穷大或非0的函数,它似乎不起作用。

另一个可以给我一些建议吗?谢谢!

Jef*_*eld 5

很难理解这个问题的原理。并非每个功能都有一个固定点。例如fun x -> (x + 1) mod 5。并非每个具有固定点的功能都可以通过从不同的起点重复应用而达到固定点。(我只是做过一些谷歌搜索,这样的固定点称为“有吸引力的固定点”。)

这里有一些评论:

  • 您不应该使用==,它是物理相等运算符。您可能想使用=,值相等。

  • 但是,我看不到该eq参数的用途。也许允许调用者指定要使用的相等性。如果是这样,则应使用而不是==