所以我的目标是将以下尾部递归函数分为两个函数。
(defmacro all (ls)
`(reduce (lambda (a b) (and a b)) ,ls))
答案 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
或者,您可以更改循环结构,以使它不会将i
从0
增加到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