[Next]PoPの使用方法 [Previous]PoP [Top]

PoPが扱うデータ

PoPは,以下のデータを扱います. これらは,総称して項(term)と呼びます.

数値
数値としては,Pythonの整数(int)と浮動小数点数(float)を扱います. この二者は区別されます. Ver0.1では,long intはサポートしていません.

文字列
Pythonの文字列(string)です.

アトム
アトムには,単純アトム複合アトムがあります.
単純アトムは,それ以上分割することができない概念を表わすもので,通常は,a,dog,true,Socratesなどと表記されます.
複合アトムは,構造をもったアトムです. 単純アトムに,一つ以上の項を引数として取った形をしています. mortal(Socrates)や,後述する変数を使用したlike(_X, _Y),入れ子になっている,is(_U, add(_V, _W)などがあります.
複合アトムは,述語や関数として使用されます.
ちなみに,単純アトムを単にアトム,複合アトムを構造体と呼ぶ流儀もあるようです.

リストNIL
リストは,項の並びです.ここでは,[a, dog, _X, [true, mortal(Socrates)]]のように表記します.
細かく言えば,リスト(というよりはセル(cell)と言うほうが適切かもしれませんが)は,頭部と尾部を持つ構造です. 記号で表わせば,[頭部 | 尾部]です.
頭部には,任意の項が入りますが,尾部には,リスト,NILのみが入ります. NILは空のリストを表わす特別なもので,[]とも表記します.
したがって,[a | [b | [c | []]]]のようなものがリストですが,これを簡略して[a, b, c]と表記します.

(Horn節)
事実規則質問を表わすものです.一般的には,
P0 :- P1, P2, .. , Pn. (Piは述語)
という形をしています. :-の左辺を頭部,右辺を本体と言います.
特に,左辺が無いものを質問,右辺が無いものを事実と言い,それぞれ
?- P1, P2, .. , Pn.
P0.
と表記します(最後のピリオドは,文として独立しているときに付けることにします).
節についての詳細は,Prologの解説書を参照してください.

変数
変数は,項を表わす未知数です. ここでは,名前の前に下線(アンダースコア)を付けて表記します. _X,_what,_nなどです.

以下に,リストの連結を行う有名なappendという述語の定義を示します.
append([], _X, _X).
append([_A | _X], _Y, [_A | _Z]) :- append(_X, _Y, _Z).

[Next]PoPの使用方法 [Previous]PoP [Top]