【发布时间】:2021-08-24 02:36:33
【问题描述】:
对于
(let ((fact
(lambda (n)
(if (= n 1)
1
(* n (fact (- n 1)))))))
(fact 10))
方案出错,我想确认我的推理是否正确,
因为(let ((var1 arg1)) body) 相当于在var1 绑定到arg1 的环境中评估身体。
上面,当我们试图在绑定调用之前计算arg1 时,我们没有找到引用,因为这正是我们试图绑定它以使其可用
但是为什么这不抛出
(let ((fact (lambda (n)
(if (= n 1) 1 (* n (fact (- n 1)))))))
(display 10))
因为我们也在尝试在那里进行绑定。
还有为什么这个不抛出
(define factorial
(lambda (n)
(if (= n 0)
1
(* n (factorial (- n 1))))))
(factorial 10)
【问题讨论】: