我正在努力区分 let、letrec、let* ......因为方案不是我的主要编程语言,我的记忆已经不存在很长时间了..我有这个功能..现在我对 letrec 很困惑..这又是递归。我可以理解...但是在这段代码中无法建立足够的联系..(可能仍然对递归感到困惑)有人可以解释为什么这里需要 letrec
(define myFunc
(lambda (start end res func)
(letrec ((func:rec_func
(lambda (x i y)
(if (>= i start)
(func:rec_func (cons i x) (- i res) (cons (func i) y)) ;; line6
(cons x (cons y '())))))) ;; line7
(func:rec_func '() end '()))))
(已编辑)我理解的是尾递归
-> [Q1] 它尾递归吗?
-> [Q2] 那么,是否应该始终使用 letrec 进行尾递归?
此函数返回 x, y 的列表,边界为 start, end 因此它检查索引 i 是否在边界内,如果是,则执行第 6 行
-> [Q3] 那么,第 6 行是什么?我无法获得第 6 行