スキームでは、新しい乗算関数は次のとおりです。
( define ( iter b a n)
( cond (( = b 0) n)
(( even? b) ( iter ( / b 2) ( * 2 a) n))
( else ( iter ( - b 1) ( / ( * a b) ( - b 1)) ( + a ( * a ( - b 1)))))))
( define ( mul b a)
( iter b a 1))
質問では、この問題に対処するために再帰的な方法ではなく反復的な方法を使用する必要があります。私の考えは次のとおりです。
for example: ( mul 2 3 )
b a n
begin: 2 3 1
1 : 1 6 1
2 : 0 6/0 6
明らかに、ステップ 2 では、a は 6/0 に等しくなります。それは不可能なはずです。しかし、機能はうまく機能します。誰でもこれを説明できますか?これは、オンラインの Scheme インタープリターの例です。