さっさと具体的プログラムに移りたいところですが、実はPROLOGには標準の大域変数と配列がありません。もちろん無ければまともなゲームどころか、科学技術計算など不可能ですから、実際上、実用を目指しているPROLOG処理系には相当品が用意されているようです。AZ-Prologにもあります(アレイ)。
では、複数のデータが扱いたくなったときに何を使うかというと、それがリストと呼ばれる複合データです。これはPROLOGでは複合項の一種なので、先に普通の複合項から。
複合項(compound term)はファンクタ(functor)と引数(ひきすう)(argument)と呼ばれる項の(カンマで区切られた)系列を括弧で閉じたもの、として表されます。つまり、
f(a, b, c)
の形です。この本来の形(エジンバラ形式での)は関数記法(functor notation)とか、AZ-Prologでは述語形式と呼ばれています。後に散々出てくる述語が、この形で表現されるからです。
結構重要な言葉にアリティ(項数)があります。引数の項の個数で、上記の例だとアリティは3です。ファンクタが異なれば当然別の述語ですが、アリティが違うだけでも別の述語の扱いになります。マニュアルでは「ファンクタ/アリティ」が解説の単位になっています。
PROLOGは歴史が浅くて初期の混乱が続いている間に流行が去ってしまったので、このあたりの用語に結構なブレがあります。まず、ISO標準では複合項では無くて構造体(structure)と呼ばれていて、本来はこちらのようです。しかし、大抵のPrologプログラマは複合項と呼ぶと思います。
余談ですが、国際標準が無視されまくっている分野は結構あると思います。私の関わる分野では、電子回路と論理回路の記号は米国流(だと思う)が主流で、国際標準はちっとも流行っていません。
ファンクタは関数子の訳がPROLOG界では一般的と思います。AZ-Prologでは述語名と記されています。辞書を引くと関数記号、関手(圏論の用語)が出てきます。引数は要素(component)と呼ばれることがあります。
特に一般的な言葉でも無いので、本シリーズではファンクタとアリティをカタカナのまま使います(気まぐれで和訳を付けます)。アトムも原始記号という訳はあるものの、そのままで。どのカタカナ語もProlog使いにはまず間違いなく通用します。
複合項は述語や数学関数を書くときの書式ではありますが、これは出てくる位置による解釈で、本来は単なるデータです。特定と関係に使います。たとえば、
human(alice).
human(bob).
は、「事実」を示します。
friend(alice, bob).
は関係です。最後にピリオドが付いているのは、PROLOGのプログラム領域 = データベースに書くときの書式です。
長くなったので、続きます。