[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")
- ~/.emacs.d/prolog.el
- https://www.metalevel.at/ediprolog/ を参考にしている
(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)