我试图弄清楚如何在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/2
和x=50
(给我0),但是对于无穷大或0以外的函数,它似乎不起作用。< / p>
另一个可以给我一些建议吗?谢谢!
答案 0 :(得分:4)
有点难以理解这个问题的基本原理。并非每个功能都有一个固定点。例如fun x -> (x + 1) mod 5
。并非每个具有固定点的函数都会通过从不同的起点重复应用而达到固定点。 (我只是做了一些谷歌搜索,这样的固定点被称为“有吸引力的固定点”。)
以下是一些评论:
您不应该使用==
,这是物理相等运算符。您可能希望使用=
,值相等。
但是,我看不到eq
参数的用途。也许允许调用者指定要使用的相等性。如果是这样,您应该使用此代替==
。