Ocaml函数调用,递归调用自身

时间:2014-02-07 18:27:22

标签: algorithm ocaml ml

以下是我要尝试做的事情,z的签名为'a -> 'a

let z(a)=
  if(a=0) then
    0
  else
    a * a;;

如果我打电话给重复,repeat(2, f, 2);; 那么答案也应该是,因为f应该使用2调用两次,就像在f(f(2)中一样,答案应该是16

1 个答案:

答案 0 :(得分:1)

我认为问题可能在于,当您定义递归函数时,您需要使用 rec 关键字告诉OCaml。

尝试将代码更改为:

let f a =
  if a = 0 then
    0
  else
    a * a

let rec repeathelper n f answer accum =
  if n = accum then
    answer
  else
    repeathelper n f (f answer) (accum+1)

let repeat n f x = repeathelper n (f 0) 0 0