スポンサーリンク

ファクトの書き方

例えば、次のようなファクトを定義したい場合を考えてみましょう。

東京は日本にある。
京都は日本にある。
北海道は日本にある。

これらのファクトをswiplで定義するには、以下のようにします。
最後にピリオドが必要なことに注意です。
ファクトを定義するための新しいファイルを作成します。
例えば、sample.plというファイル名にし、sample.plとして保存しておきます。
これで、ファイルに定義されたファクトがswiplで利用できるようになります。

% 東京は日本にある。
japan(tokyo).

% 京都は日本にある。
japan(kyoto).

% 北海道は日本にある。
japan(hokkaido).

スポンサーリンク

swiplでファクトの読み込みとクエリーを実行

まずはswiplを起動します。
MACターミナルでswiplと入力します。

$ swift

定義されたファクトをswiplで確認するには、swiplを起動し、[ファイル名].と入力します。例えば、[sample].と入力すると、sample.plに定義されたファクトがロードされ、使用可能になります。
?- [sample].
true.

クエリーを実行してみましょう。
上記のファクトに対して、以下のようなクエリーを行うことができます。
「北海道は日本にあるか?」というクエリー:
japan(hokkaido).と入力します。クエリを入力したら、Enterキーを押します。

?- japan(hokkaido).
true.

swiplはクエリを評価し、その結果を表示します。例えば、上記のクエリの場合、trueと表示されます。
上記の例では、japan(hokkaido).というクエリを評価しています。このクエリは、sample.plに定義されているjapanファクトの中から、hokkaidoを探し、その結果がtrueであるかどうかを確認します。
trueと表示されたので、japan(hokkaido).というファクトが定義されていることがわかります。

「沖縄は日本にあるか?」というクエリー:
結果は「false」となります。

?- japan(okinawa).
false.

更に、以下のようなクエリーも可能です。
「日本にある都市を全て表示する」というクエリー:
回答を連続して出力するためには、「;]の入力が必要です。

?- japan(X).
X = tokyo ;
X = kyoto ;
X = hokkaido.

結果は「X = tokyo ; X = kyoto ; X = hokkaido」となります。これは、japan(X)というクエリーによって、japanという述語がXという変数を持つ全てのファクトを満たす解を探していることを意味しています。tokyo、kyoto、hokkaidoの順で解が返されます。

スポンサーリンク