スキームで末尾再帰べき乗関数を書くのに問題があります。ヘルパー関数を使用して関数を書きたい。累積値を保持するためのパラメーターが必要であることはわかっていますが、その後は行き詰まっています。私のコードは次のとおりです。
(define (pow-tr a b)
(define (pow-tr-h result)
(if (= b 0)
result
pow-tr a (- b 1))(* result a)) pow-tr-h 1)
コードを編集したところ、動作するようになりました。それは次のとおりです。
(define (pow-tr2 a b)
(define (pow-tr2-h a b result)
(if (= 0 b)
result
(pow-tr2-h a (- b 1) (* result a))))
(pow-tr2-h a b 1))
ヘルパー関数がメイン関数と同じパラメーターを持つ必要がある理由を誰かが説明してくれますか? なぜこれが必要なのか考えるのに苦労しています。