なんじゃくにっき

プログラミングの話題中心。

Prolog 規則(rule)と事実(fact)

Prolog節(clause)の一つ、規則(rule)と事実(fact)について解説します。
 
■規則(rule)
前々回くらいに取り上げた、


animal(X) :- mammal(X).

 
という規則を例に取ります。
 
このうち
前半部 animal(X) を頭部(head)もしくは条件部
後半部 mammal(X) を本体(head)もしくは結論部
前半部と後半部を繋ぐ 『:-』 をネック
と呼びます。
 
頭と体をつなげるのが首(ネック)というわけです。
この例では、意味としては『mammalならばanimal』ということになります。
  
animal(X)、mammal(X)の引数Xは変数です。
変数はアルファベットの大文字で始めます。
変数は、計算時に何らかの値が代入されます。

 

■事実(fact) 
次に、事実(fact)に移ります。
例としては


mammal(whale).

 
のような節が事実になります。
事実は、条件を問わず必ず真である述語です。
規則のうち、頭部だけのものが事実にあたります。
 
ここで mammalの引数whaleはアトム(atom)です。
アトムはそれ以上不可分なもの、という意味です。物理の原子(atom)と一緒。
アトムという用語の使い方はLisp由来です。
アトムは変数とは違って、具体的な値が入ります。
 
書き方としてはアトムはアルファベットの大文字以外の文字で始めます。
日本語も使えますが、SWI-Prologの場合、表示が乱れるのであまりおすすめしません。
_(アンダーバー)などの記号から始めることも可能ですが、一部の記号は使えません。
 
アトムの例. hoge, _Fuga, ぴよ 
 
 
変数は大文字から、アトムは小文字から始める、と覚えておけばOK。
 
 
■実際に動かしてみよう
 
適当なテキストファイルに


mammal(whale).
animal(X) :- mammal(X).

と打ち込んで、適当な名前で(例:hoge.pro)保存します。
 
そのファイルをSWI-Prologで開くと、
mammal(whale)という事実と
animal(X) :- mammal(X)という規則が登録された状態で起動します。
 
SWI-Prologは起動すると質問(query)を受け付ける状態になっています。
ここで


?- animal(whale).

と入力すると、システムは登録された情報を元に


true.

という答えを返します。