logo

プロローグプログラム

組み込みの述語、一連の目標を使用したり、システム プロンプトで目標を指定したりすること自体は、ほとんど価値がありません。 Prolog プログラムを作成するには、まずユーザーは Prolog 言語で作成されたプログラムを作成し、そのプログラムをロードして、プロンプトで 1 つ以上の一連の目標を指定する必要があります。

Prolog でプログラムを作成する簡単な方法は、プログラムをテキスト エディターに入力し、次のようなテキスト ファイルとして保存することです。 prolog1.pl

次の例は、Prolog の簡単なプログラムを示しています。プログラムには、句と呼ばれる 3 つのコンポーネントが含まれています。各句はピリオドを使用して終了します。

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

組み込み述語を使用する ' 相談してください」 、上記のプログラムは Prolog システムにロードできます。

?-consult('prolog1.pl')。

これは、prolog1.pl ファイルが存在し、prolog プログラムがシステム的に正しいことを示しています。つまり、有効な句があり、目標は成功します。また、プログラムが正しく読み取られたことを確認するために、1 行以上の出力が生成されます。例えば。、

?-
# prolog1.pl を参照するには 0.00 秒
?-

np.sum

「consult」の代替手段は「Load」です。これは、Prolog システムにグラフィカル ユーザー インターフェイスがある場合、メニュー オプションに存在します。

プログラムがロードされると、句は記憶領域に配置され、その記憶領域は Prolog データベースとして知られます。システム プロンプトに応答して、一連の目標を指定すると、Prolog が目標の評価に必要な句を検索して使用します。

用語

次のプログラムでは、3 行で句が示されています。

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

ピリオドを使用すると、各句が終了します。 Prolog プログラムには一連の節があります。事実または規則はこれらの条項によって説明されます。

の例 事実犬(ロットワイラー) そして 猫(マンチカン) 。彼らはそれを意味します。 ロットワイラー は犬です」と「 マンチカン 猫だよ』

Dog は述語と呼ばれます。 Dog には引数が 1 つ含まれています。言葉 ' ロットワイラー」 括弧()で囲みます。ロットワイラーはアトムと呼ばれます。

ルールの例はプログラムの最終行です。

 animal(A) :- dog(A). 

コロン(:-)文字は「if」として読み取られます。ここで、A は変数であり、任意の値を表します。自然に、このルールは「A が動物であれば、A は犬である」と解釈できます。

上記の条項は、 ロットワイラー は動物です。このような演繹は、Prolog によっても行うことができます。

?- 動物(ロットワイラー)。
はい

それを暗示するために マンチカン は動物ですが、その証拠はありません。

?- 動物(マンチカン)。
いいえ

用語の詳細

目標項を評価することで、それが満たされているかどうかが決まります。また、目標が true または false に評価されることも意味します。

ユーザーが目標を入力すると、それがコマンドとして解釈される場合があることに注意してください。例えば、

?- 停止します。 「Prolog システムを終了するために使用されます。」

場合によっては、次のような質問とみなされることもあります。

?- 動物(ロットワイラー)。 & 「ロットワイラーは動物ですか?」

次のプログラムは、動物に関する別の例を示しています。 8つの条項から構成されています。コメントは、/* と */ の間のすべてのテキストによって表示されます。

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

述語 Dog と述語 Cat には両方とも 4 つの節があります。テキスト ファイル「animal.pl」にプログラムが保存されており、プログラムをロードしてシステム プロンプトに出力を生成することで、次のように一連の目標を入力しているとします。

?- コンサルト('animals1.pl')。システムプロンプト
# 0.01 秒でアニマルズ.pl に問い合わせます。

?- 犬(ロットワイラー)。
はい

?- 犬(ボクサー)。
いいえ

?- 犬(A)。
A = ロットワイラーが一時停止 - ユーザーがリターン キーを押した

?- 犬(B)。
B = ロットワイラー。一時停止しますか?ユーザーが ; を押します。
B = プードル。一時停止しますか?ユーザーが ; を押します。
B = ブルドッグ;一時停止しますか?ユーザーが ; を押します。
B = ドーベルマン 一時停止はありませんか?次の行に進みます

?- 猫(A)。 A = スフィンクス。一時停止 ?ユーザーが押します。
A = ベンガルは一時停止しますか?ユーザーがリターンを押す

?- 聞いている(犬)。述語ドッグを定義するすべての句がリストされます。

/* 犬/1 */

犬(ロットワイラー)。
犬(プードル)。
犬(ブルドッグ)。
犬(ドーベルマン)。
はい
?-

この例では、Prolog のさまざまな新機能が紹介されています。クエリは次のとおりです。

?- 犬(A)。

これは、A の値を見つけて、それが犬の名前になることを意味します。プロローグの答えは次のとおりです。

A = ロットワイラー

A の他の答えとしては、プードル、ブルドッグ、ドーベルマンが考えられます。これにより Prolog が一時停止するため、システム プロンプト ?- が出力される前に、ユーザーが 'return' キーを押すまで待つ必要があります。

次のクエリを次のように入力できます。

?- 犬(B)。

このクエリは以前と同じです。上記のクエリは、「B の値を見つければ、それが犬の名前になる」ということを意味します。プロローグの答えは次のとおりです。

B = ロットワイラー

Java同期

プロローグは再び一時停止します。今回はセミコロン (;) キーがユーザーによって押されました。ここで、Prolog は、目標の dog(B) を満たす B の代替値を見つけます。次のように返信されます。

B = プードル

プロローグは再び一時停止します。ユーザーがセミコロン (;) キーを再度押します。 Prolog は次のようなさらなる解決策を生成します。

B = ブルドッグ

プロローグは再び一時停止します。ユーザーがセミコロン (;) キーを再度押します。 Prolog は次のようなさらなる解決策を生成します。

B=ドーベルマン

Prolog は、一時停止しないことで利用可能な解決策がもうないことを認識しますが、システムはすぐに出力を続行することで ?- を表示します。

この例では、新しい組み込み述語が導入されています。目標を指定する

?- リスト(犬)

上記の目標では、Prolog は述語ドッグを定義する 4 つの節をすべてリストします。これらは、データベースにロードされたときと同じ順序で定義されます。

クエリでの変数の使用を次の例に示します。ゴールの順番は以下の通りです。

?-猫(A)、犬(B)。

これにより、猫と犬のあらゆる組み合わせが得られます。

?-猫(A)、犬(B)。
A = スフィンクス、
B = ロットワイラー。

A = スフィンクス、
B = プードル。

A = スフィンクス、
B = ブルドッグ;

A = スフィンクス、
B = ドーベルマン。

対照的に、ゴールの順序は次のとおりです。

Javaの文字列結合

?-猫(A)、犬(A)。

これにより、猫と犬の両方であるすべての動物が得られます (データベースにはそのような動物はありません)。ここで、A は cat(A) と Dog(A) の両方の「任意の値」ですが、両方とも同じ値でなければなりません。

?-猫(A)、犬(A)。
いいえ