SICP 読み (298) 5.4 積極制御評価器

移動中に机上で答えに至ったのですが、昨晩は爆飲によりエントリ投入不能。

問題 5.29

しかしどうやって書けば良いのやら。
まず、_k が何か_なんですが、S(n) の計算というか、S(n-1)+S(n-2) の計算に必要な push の数って言えば良いのでしょうか。

  • fib(n) の呼び出しで 5 回 push
  • fib(n) の中の if で 3 回 push
  • if の条件式の評価で 8 回 push
  • else ブロックの加算と減算と減算で 24 回 push

のセットが上記の計算に必要な push の数。条件式の評価が偽な時には単純に上記から 24 を引いた数になるので S(2) の場合は 40+16+16 で 72 になる。ちなみに加算している 16 ですが、S(0) とか S(1) とかの計算に必要な push の数になる。条件式が真になるケースでは変数を lookup して戻すだけなので。
次の S(3) の場合には S(1) で必要な 16 と S(2) で必要な 72 に加えて上記の箇条書きな回数の push が必要になる、という事。
あるいは次の aFib(N+1) + b については

2x+y=72
3x+y=128

連立方程式を解くと x が 56 で y が -40 という値が出てくる。どっちも 8 の約数で y なんて再び 40 が出てきてたりなんかします。値に何らかの意味があるはずなんですが、どうなんでしょうか。