パソコン活用研究PCマニアックの道(アセンブラ、DOS、Windows、その他プログラム言語、旧型PCの活用研究)



Prolog記述の仕方の基本(節、アトム、事実の定義と変数)

1 節、事実の定義、アトム

Prologはたいへん面白い言語で、例えば「サザエはタラの親である」みたいな文を、プログラムに
記述することができます。Prologではこれを 
parent(sazae,tara).
のように記述します。(最後にピリオドをうつのを忘れないで下さい。)

親であるという関係(述語)を一番前にもってきて、括弧の中に引数を記述し、述語(引数, 引数, .....).
という形で記述します。わかりやすいですね。

では、ちょっとだけProlog用語を説明しておきましょう。いくつもありませんので、しっかり覚えておいて
下さい。以降は、このProlog用語で説明していきますので。
Prolog用語では、このparent(sazae,tara). という一文をと呼びます。そして「サザエはタラの親である」
というようなある関係を定義している節を、事実定義(宣言)している節といいます。
また、sazae, tara のような引数(Basicのような普通のプログラム言語でいうところの定数かな)は
アトムと呼びます。(Lispと似てますね) アトムは小文字で始めて下さい。大文字で始めると、それは
変数とみなされてしまいますので、この点は注意して下さい。

では、実例に即してどんどんPrologを使ってみましょう。(ここでは、Swi-Prologを使います)
まず、以下のプログラム(1文だけですが)をsazae0.swiとでもして作成して下さい。

parent(sazae,tara).

Prologを起動したら、[File]-[Consult] とクリックして、先ほど作ったsazae0.swiを読み込んでください。
読み込みが完了すると、以下のように
% c:/Program Files/pl/src/sazae0.swi compiled ............
という表示がされます。

SWI-prologは
1 ?-
と表示してコマンド待ち状態になっていると思いますので、続けて
?- parent(sazae,tara).
と質問して下さい。これは、「さざえはたらの親か」という質問です。
sazae0.swi で「さざえはたらのおやである」、という事実を定義してありますので、PrologはYesと答えを
返します。

2 変数

ただ、yes, no で答えるだけではそんなに面白くもありませんが、Prologではもう少し人工知能言語と
言われるような面白いことができます。
続けて、
?- parent(X,tara).
と聞いてみましょう。これは、たらの親は誰(変数X)?という質問です。
Prologでは、変数は大文字にします。
X = sazae
たらの親はさざえであるという答えが返ってきました。どうでしょうか、面白くありませんか。
Prologでは、このように変数にあてはまる答えを探してくれるのです。

ではもっと面白いことをしてみましょう。引数を全て変数にしてみたらどうなるでしょうか。例えば
?- parent(X,Y).
と聞いてみましょう。今度は、親も子供も変数ですので、親子関係にある親と子供は
誰?(X,Y)という質問になります。
X = sazae Y =tara
という答えが返ってきました。Prologが親子関係にある事実のパターンを探して
その組み合わせを探してくれました。Prologではこの動作をパターンマッチングと呼んでいます。

どうですか、なんか面白そうな言語でしょう。
今回はPrologの基本中の基本の部分について説明してみました。ほんの少しですが、なじみのない
プログラム言語ですので、一挙につめこまずすこしづつやっていきましょう。
今回の分の一連の流れを参考までに掲載しておきます。

  (図1)



TopPage


inserted by FC2 system