如何调用函数并在该函数中使用全局变量

时间:2019-09-08 19:46:32

标签: functional-programming ocaml

所以我的目标是将以下尾部递归函数分为两个函数。

(defmacro all (ls)
 `(reduce (lambda (a b) (and a b)) ,ls))

1 个答案:

答案 0 :(得分:1)

  

我不确定如何在循环函数中使用n

不能,是什么使嵌套函数定义如此流行:-)您需要添加第四个参数,并将其传递给所有递归调用而不会改变:

let rec loop i n a b = 
  if i = n then a
  else loop (i+1) (n) (b) (a+b) 

let fib n = 
  loop 0 n 0 1

或者,您可以更改循环结构,以使它不会将i0增加到n,而是具有一个变量(例如j)计数从n向下移动,因此您只需要检查它何时到达0中的loop

let rec loop j a b = 
  if j = 0 then a
  else loop (j-1) (b) (a+b) 

let fib n = 
  loop n 0 1