このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/73
#  [1] 授業単元:C言語演習  
#  [2] 問題文:  
#  以下の実験データは、あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。  
#  以下のリストの< >の処理をコメントに従って埋め、メッセージ毎の転送時間を出力するプログラムを作成せよ。  
#  但し、メッセージ転送時間は、メッセージ発生時刻との差である。  
#  <実験データ>  
#  メッセージ番号 発生時刻[ミリ秒] 到着時刻[ミリ秒]  
#     0        0         25  
#     1        5         30  
#     2        10         38  
#     3        15         50  
#     4        20         52  
#     5        25         55  
#     6        30         57  
#     7        35         60  
#     8        40         65  
#     9        45         70  
#  <リスト>  
#  http://ime.nu/ime.nu/codepad.org/PW5VddGM  
#  
#  #include 
#  struct MESSAGE
#  {
#   int gene;
#   int end;
#   int delay;
#  };
#  
#  void delay(struct MESSAGE data[], int i);
#  
#  int main(void)
#  {
#   struct MESSAGE data[10]; int i;
#  //<メッセージの発生時刻と到着時刻の値の代入>
#   for (i=0; i<=9; i++)
#   {
#    delay(data, i);
#    prinff("メッセージ%dの転送時間は%dミリ秒 \n",i, data[i].delay);
#   }
#  }
#  
#  void delay(struct MESSAGE data[], int i)
#  {
#  //<メッセージiの転送時間の計算>
#  }

実験データ(0,0,25,_).
実験データ(1,5,30,_).
実験データ(2,10,38,_).
実験データ(3,15,50,_).
実験データ(4,20,52,_).
実験データ(5,25,55,_).
実験データ(6,30,57,_).
実験データ(7,35,60,_).
実験データ(8,40,65,_).
実験データ(9,45,70,_).

'以下の実験データは、あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。メッセージ毎の転送時間を出力する' :-
        実験データの転送時間を更新(_メッセージ番号,_転送時間),
        writef('メッセージ番号%tの転送時間は%t\n',[_メッセージ番号,_転送時間]),
        fail.
'以下の実験データは、あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。メッセージ毎の転送時間を出力する'.

実験データの転送時間を更新(_メッセージ番号,_転送時間) :-
        retract(実験データ(_メッセージ番号,_発生時刻,_到着時刻,_)),
        _転送時間 is _到着時刻 - _発生時刻,
        assertz(実験データ(_メッセージ番号,_発生時刻,_到着時刻,_転送時間)).


%  dynamic宣言を行わないretract/assertz