"define by run" と"define and run"

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
abcd

"define by run" と"define and run"

#1

投稿記事 by abcd » 1週間前

最近"define by run" と"define and run" という言葉よく目にしたけれども、
詳しい解釈は見当たりませんでした。

自分の感覚ではこれまでのプログラムどれも"define by run" でありながら"define and run"でもあるというですね。
当然関数や文の定義してから実行(run)でしょ?両者別々のは当たり前では?!
そして某関数のコールよりさらに別の関数がコールされますね。
それから関数がコールされてから、引き数で中の変数の中身を算出したり、設定したりしますよね。
これはまさか"define and run"ですね。

"define by run"も常数でない場合、やはり関数をコールによって、変数の中身が確定されていくでしょ?

つまり、"define by run" と"define and run"が対立的な概念として存在する意味はあかりません。

ご教授お願い致します。

かずま

Re: "define by run" と"define and run"

#2

投稿記事 by かずま » 1週間前

定義するのは、処理に必要なデータ構造ですよ。

単純な例を作ってみました。
二数の積を求めるプログラムです。

define and run

コード:

#include <stdio.h>

int main(void)
{
	static int table[10][10];
	int a, b;

	for (int i = 1; i <= 9; i++)
		for (int j = 1; j <= 9; j++)
			table[i][j] = i * j;        // define

	while (scanf("%d%d", &a, &b) == 2)  // run
		printf("%3d\n", table[a][b]);
}
実行に使用するデータ構造を、想定される入力に対して
すべて構築してから、実行を開始しています。

define by run

コード:

#include <stdio.h>

int main(void)
{
	static int table[10][10];
	int a, b;

	while (scanf("%d%d", &a, &b) == 2) {  // run
		if (table[a][1] == 0)
			for (int j = 1; j <= 9; j++)
				table[a][j] = a * j;      // define

		printf("%3d\n", table[a][b]);
	}
}
実行を開始してから、入力データに応じて必要な分だけデータ構造を構築します。

これで納得してもらえますか?

二数の積なら、define なしで run だけで済みますが。

コード:

#include <stdio.h>

int main(void)
{
	int a, b;

	while (scanf("%d%d", &a, &b) == 2)  // run
		printf("%3d\n", a * b);
}

かずま

Re: "define by run" と"define and run"

#3

投稿記事 by かずま » 1週間前

かずま さんが書きました:
1週間前
二数の積を求めるプログラムです。
10 を 10000 に、9 を 9999 に変更してください。
9999までの二数の積を求めるプログラムです。

abcd

Re: "define by run" と"define and run"

#4

投稿記事 by abcd » 1週間前

かずま さま
ご回答有難うございます。

挙げられた例からすれば、
通常われわれは『無意的に』とっくに"define by run"を使ってきたのですね。

わざわざ "define by run" とか"define and run"を区別する必要あるのでしょうか。

特に"define and run"の存在意義が分かりません。
要は"define by run"がある以上、わざわざ"define and run"のメリットを強調するケースは何でしょうか。

またどうぞ宜しくお願い致します。

返信

“C言語何でも質問掲示板” へ戻る