FreeStyleWiki

Prolog入門

このエントリーをはてなブックマークに追加

[Prolog]

Prolog入門

  理論

Prologのプログラムは次の3つの要素から成る。

事実: 事物とその関係についていくつかの事実を宣言すること。

規則: 事物とその関係についての規則を定義すること。

質問: 事物とその関係について質問すること。

  実際のインストール手順

  • Debian/busterで検証
$ sudo apt-get install swi-prolog
$ prolog --version
SWI-Prolog version 8.0.2 for x86_64-linux
  • Emacsで対話環境起動
    • Emacsを立ち上げた状態で「M-x run-prolog」とやると対話環境が立ち上がる
    • prologは「?-」がプロンプトらしい
?- write(hello).
hello
true.

?- X is 2+2.
X = 4.
  • 簡単なプログラム
    • statementの終わりにはピリオドが必要
$ cat hello.pl 
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.

  EmacsでPrologを書く

Debianの場合、すでにprolog-modeは入っているので

  • ~/.emacs
;; prolog
(load "~/.emacs.d/prolog")
(autoload 'run-prolog "prolog" "Start a Prolog sub-process." t)
(autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t)
(autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t)
(setq prolog-system 'swi)
(setq auto-mode-alist (append '(("\\.pl$" . prolog-mode)
                                ("\\.m$" . mercury-mode))
                              auto-mode-alist))

(unless (package-installed-p 'ediprolog)
  (package-refresh-contents) (package-install 'ediprolog))
(require 'ediprolog)
(setq ediprolog-system 'swi)
(global-set-key "\C-c\C-e" 'ediprolog-dwim)