d金魚の頭の中のデバッグ回路

http://d.hatena.ne.jp/xor/20060204/p3
より、
どこでエラーが発生しているのか頭の中で解きなさいとの事。
なるなる。
どれどれ、フローチャートは以下のような感じだ。

  • 見た感じ、割り算を使っているので多分0除算、よって除算部を念頭に頭に状態遷移を作りつつ見ていく。
  • 着目したのが以下の行

    6 b := (a+c)/b;
    9 b := (a/b)+c;
    11 a := (a+2)/(b-3);
    12 b := (b-1)/a;
    17 a := (c+5)/(a-2);
    18 b := (a+c)/b;
    19 c := (c/b)+1;
    20 a := c/a;
  • まじめに計算して考えていくと7番目くらいで記憶破壊。別のアプローチを考える。
  • 4行目のa = a + b ということだから5行目はc = c+b-(a+b)みたいに、足したりひいたりを頭の中でやりやすいように持っていく。
    それを頭の中でVisualizeする。*1
  • 前の行の計算結果が次の計算式に入り込んでいることが多い。これから割る数が0になる可能性のある状態を直感で予測しておく。
  • ゴメン、IQ人並み以下*2のうちには無理だったわ・・・9行目あたりで記憶破壊が起きる。
ってか、私はライブラリばっかり作成する方なのでこのようなプログラムの組み方はなかなかしないのだ。
というより、意図的にこのような状態のプログラムになるのを避けている気がする。
つか、眠い!!!寝かせて!!!
(はい、見苦しい言い訳でした・・・)

ちなみに0で割ることについて熱く書いているサイトを発見http://www.uja.jp/contents/math/divbyzero.html

*1:いま、ちょっと思ったが、この頭の中でVisualizeする技能って関数型プログラミングに必要な気がしてならない。

*2:http://d.hatena.ne.jp/studiokingyo/20041103