開発じたばた日誌

前へ●●●次へ
じたばた日誌目次へ戻る
TSUCHY Softへ戻る


再帰呼び出し 編

 目標が高いのはいいのですが、どうやって実現すればいいのでしょう。 全く気が狂いそうです。

 if (((x+y)*3-10)==((z/a)*3)) {
  int zzz=1;
 }

 こんなものを処理するんですよ! ただラッキーなことに、前の会社でNCプログラムの処理系を少しやった経験があります。 Cの計算処理系では、+も−も関数も==も代入さえも、ある一つの値を返す演算と見なすと統一的な処理ができます。 ただ演算の優先順位とかカッコが面倒です。カッコの入れ子の深さに制限をつけたくありません。 カッコのなかにまたカッコの計算、そのなかにまたカッコの計算...どうすればいいんでしょう?

 この開発ではこのような問題が非常にたくさんあります。ifのなかにまたif。whileのなかにまたwhile。 構造体宣言のメンバにまた構造体。 このような猛獣どもをうまくあしらわないといけません。力技でやるともうバグバグでいずれ破綻します。

 少し作った段階で、このようなものを扱うには再帰呼び出しが非常に適していることに気づきました。 ifのなかにまたifがあるときは、ifを処理する部分でもう一度自分自身を呼び出せばいいのです。 もちろんプログラムとしてつくるときはもう少し工夫がいりますが、Cインタプリタの開発では再帰呼び出しを使ったおかげで 処理が非常にコンパクトですっきりしています。

1999.5.13