1

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

例如,如果我的函数是x/2和我的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)

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

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

4

1 回答 1

6

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

以下是一些评论:

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

  • 但是,我看不到该eq参数的用途。也许调用者被允许指定使用什么相等。如果是这样,您应该使用 this 而不是==.

于 2013-01-20T03:11:26.327 回答