sumのような繰り返しのある関数の実行も, これまでと同じように考えることができます.
簡単のためにsum(3)が計算される様子を見てみましょう. 説明が長くなるのを避けるために, 式の中で次に計算される場所を《》で囲んであります.
- sum(3)という式は, 関数の定義本体で置きかえられ,
- if 3=0 then 0 else (sum(3-1))+3という式になる.
- if 《3=0》 then 0 else (sum(3-1))+3の《》部分が計算され, falseに置きかえられる
- if false then 0 else (sum(3-1))+3なので, 全体がelseの後の式で置きかえられる
- (sum(《3-1》))+3なので, 《》部分が計算されて2に置きかえられる
- (《sum(2)》)+3なので, 《》部分が関数の定義本体で置きかえられる
- (if 2=0 then 0 else (sum(2-1))+2)+3という式になる
- (if 《2=0》 then 0 else (sum(2-1))+2)+3の《》部分が計算され, falseに置きかえられる
- (《if false then 0 else (sum(2-1))+2》)+3なので《》部分がelseの後の式で置きかえられる
- ((sum(2-1))+2)+3という式になる.
- ((sum(《2-1》))+2)+3
- ((《sum(1)》)+2)+3
- ((if 《1=0》 then 0 else (sum(1-1))+1)+2)+3
- ((《if false then 0 else (sum(1-1))+1》)+2)+3
- (((sum(《1-1》))+1)+2)+3
- (((《sum(0)》)+1)+2)+3
- (((if 《0=0》 then 0 else (sum(0-1))+0)+1)+2)+3
- (((《if true then 0 else (sum(0-1))+0》)+1)+2)+3
- ((《(0)+1》)+2)+3
- (《(1)+2》)+3
- 《(3)+3》
- 6
この様子から分かるように, sumという関数をその定義で置きかえ, その中に出てきたsumが再び定義で置きかえられてゆくことで繰り返しが行われるわけです.