ocaml weired递归

时间:2014-07-29 19:27:08

标签: ocaml caml

我试图通过Ocaml计算数字的平方根,这是我的代码:

let isclose x y =  abs_float(x -. y)<0.001;;
let average x y = (0.5*.x)+.(0.5*.y);;
let rec guess x y = if isclose y (x /. y) then y else guess x (average y x/.y);;
let sqr x = guess x 1.;;
然后,输入

sqr 1.;;

按预期给出1,但键入

sqr 2.;;

无限期地持续下去。 可以帮助我的错误(我在Python中测试了算法,它按预期工作)。 谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

你想要这个:

let rec guess x y =
    if isclose y (x /. y) then y else guess x (average y (x/.y))

请注意额外的括号。

的含义
average y x /. y

(average y x) /. y

您需要:

average y (x /. y)