我正在研究计算机程序的结构和实现一书,其中一章中有一些代码用于计算数字的阶乘:
(define (factorial n)
(fact-iter 1 1 n))
(define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter (* counter product)
(+ counter 1)
max-count)))
在本书的前面,我了解到我可以在另一个函数中内联定义函数,如下所示:
(define (factorial n)
(define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter (* counter product)
(+ counter 1)
max-count)))
(fact-iter 1 1 n))
我知道使用第二种方法fact-iter
将无法在范围之外访问,factorial
但我想知道当我运行第二个版本时会发生什么factorial
?
定义了符号的新本地绑定fact-iter
并创建了新函数,或者此绑定仅在程序编译时创建一次?
我来自java背景,这对我来说还不清楚。