質問と命令
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.

ひとたび事実を入力すれば、その事実について質問することができます。

IF/Prolog が"?-"というプロンプトで示されるインタプリタレベルにある場合、IF/Prolog は項を読み込み、それらの項を指示として扱います。これらの指示を質問と呼びます。Prologの項は、必ずドット"."で終わり改行します。Prologは、ユーザが入力を終了するまでは何も実行しません。以下のように入力して下さい。

?- 'Newman' reports_to 'Smith'.

すると、システムは次のように答えます。

yes ?- _

インタプリタがプロンプト"?-"を表示していれば、質問の実行が終了したことを表しています。質問に変数が含まれている場合は、各変数の値が表示されます。

従って次の質問  ?- X reports_to 'Smith'.

には次のように答えるでしょう。 X = 'Newman' _

この時点でインタプリタは、この解で十分なのか、あるいはバックトラックしてもっと解があるのかどうか調べるべきなのか、あなたが指示するのを待っています("制御の流れ"、たとえばバックトラッキングについての詳細は、「制御の流れ」の章と/ClocMel/をご参照下さい)。";"と入力してから改行すると、システムはバックトラックして他の解を探します。単に改行すれば、質問は終わります。";"や改行の前に、いくつかのスペース、あるいはタブを入れてもかまいません。

X = 'Newman' ; X = 'Nixon' ;

この場合、別の解を見つけることができず、IF/Prolog は次のように出力します。 no ?- _

組み込み述語findall/3は、与えられたゴ−ルに対するすべての解を探します。次の例ではゴール"Y is_subordinate_to X"を満たす、すべてのXに合てはまる解を見つけます。

?- findall(X,Y is_subordinate_to X,L).

X = _3224 X = _3228 L = ['Jones','Jones','Smith','Smith','Smith', 'New','New','New','New','New','New','New'] _ 改行して下さい。 yes ?- _

"L"に返された結果は、Mr.Johnesには2人、Mr.Smithには3人、Mr.Newには7人の部下がいるというように解釈されます。以下のようにしてMr.Newの部下とは誰であるかを見てみましょう。 次のように入力して下さい。

?- findall(X,X is_subordinate_to 'New',L).

X = _3448 L =['Smith','Jones','White','McDonald','Newman','Nixon'] _

ここで、改行して下さい。 yes ?- _


戻る 続く..