我有一个用于查找固定点的 OCaml 函数:
>> let rec fix f x =
let x' = f x in
if x = x' then x else fix f x';;
(system message) val fix : ('a -> 'a) -> 'a -> 'a = <fun>
问题是,我不明白输入时它是如何工作的:
>> let cubed x = x*x*x;;
(system message) val cubed : int -> int = <fun>
>> fix cubed 2;;
(system message) - : int = 0
在我的理解中,fix cubed 2
会陷入无限循环fix cubed 2*2*2
,fix cubed (2*2*2)*(2*2*2)*(2*2*2)
以此类推。这个函数如何正确找到不动点0
?