| ||||||||||
| MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008. -・C関数名”Forpred”は、Cboot()関数の中でマクロ定義CPRED()によってIF/Prologに与えられます。 -・プログラムポインタ変数は、マクロ定義COROUTINEによって自動的にユ−ザのプログラムに加えられることに注意して下さい。 -・述語の最初の呼び出しは、プログラムポインタである変数portを0として行われます。これによって、ル−チンのswitch文のcase0を実行し、switch文からぬけ出します。 -・型チェックは、第1引数と第3引数について行われます。もしそれらが整数でない場合、”integer_expected”というエラ−メッセ−ジが出力され、関数はFAILポ−トから外に出ます。 -・それ以外の場合は、カウンタ−iが述語の第1引数(Min_int)の値に初期化され、第3引数の最大値(Max_int)がmaxに記憶されます。そしてwhileル−プを1回実行します。最初のwhileル−プの繰り返しで、カウンタ−i(Min_int)は、述語の第2引数と単一化され、ル−チンは1を返してル−プを出ます。 -・Prologでバックトラックのために2番目の解を必要な場合、ル−チンはプログラムポインタ、portを直前の戻り値1にして、ル−チンを呼び出します。switchはcase1を選び、制御の流れは、実際にwhileル−プの中にあるラベルres1に移されます。whileル−プは実行を続け、カウンタを増やし、カウンタが最大値より小さいので、2回目の繰り返しを始めます。現在のカウンタの値は第2引数と単一化され、1が返されます。 -・Prologで3番目の解が必要な時には、上で述べたものと同じ手続きがとられます。注意:多くのC述語では、返り値は、ここでいう各DETACHとは同じになりません。また制御の流れは、常に同じラベルに到達するわけではありません。 -・Prologで4番目の解が必要な時には、switch文は制御の流れを再びwhileル−プの中のres1に移します。しかし今回は、カウンタが増やされた後カウンタの値が最大値を越えているので、whileル−プは実行を繰り返しません。その代わりに次のステ−トメントFAILが実行されたり、0が返されます。これはもうそれ以上他の解がなく、述語が失敗したことを表しています。 | ||||||||||
|
| Back> |
|