読者です 読者をやめる 読者になる 読者になる

きくらげ観察日記

好きなことを、適当に。

SWI-Prologを始めてみる

長いこと積んであった『Prolog Programming for Artificial Intelligence』を少しずつ読み始めることにしたので、現在使っているUbuntuにSWI-Prologをインストールすることにしてみました。

$ sudo apt install swi-prolog

実行はprologコマンドでできます。

$ prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.2.3)
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?-

早速適当にコードを書いてみましょう。

% hello.pl
% 拡張子が .pl なのが Perl と被ってキモいけど、
% 今時 Perl とか使わないしまあ大丈夫そう。

human(me).
human(you).

parent(me, papa).
parent(me, mama).
parent(papa, grandpa).
parent(mama, grandma).

ancestor(X, Y) :- parent(X, Y).
ancestor(X, Z) :-
    ancestor(X, Y),
    parent(Y, Z).

コードの読み込みは[ファイル名]で行うことができます。ただし、大文字から始まるファイル名は変数として扱われてしまうのか、読み込むことができません。

?- chdir('/path/to/src/').
true.

?- [hello].
true.

対話環境上で適当な問い合わせを行ってみましょう。

?- human(X).
X = me [Enter].

Enterを押すと、そこで検索が中断されます。残りの検索結果を見たい場合には、タブキーを押します。

?- human(X).
X = me [Tab];
X = you.
?- ancestor(me, X).
X = papa ;
X = mama ;
X = grandpa ;
X = grandma .