以下是我要尝试做的事情,z
的签名为'a -> 'a
,
let z(a)=
if(a=0) then
0
else
a * a;;
如果我打电话给重复,repeat(2, f, 2);;
那么答案也应该是,因为f
应该使用2
调用两次,就像在f(f(2)
中一样,答案应该是16
。
答案 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