私は本「コンピュータープログラムの構造と実装」に取り組んでおり、章の1つに、数値の階乗を計算するために使用されるコードがいくつかありました。
(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))
2 番目のアプローチを使用するfact-iter
と、の範囲外ではアクセスできないことはわかっていますfactorial
が、2 番目のバージョンのfactorial
?
シンボルの新しいローカル バインディングfact-iter
が定義され、新しい関数が作成されるか、このバインディングはプログラムのコンパイル時に 1 回だけ作成されますか?
私はJavaのバックグラウンドから来ていますが、これはまだ明確ではありません。