prologをやるぞー
なんかprologをやることになった。
環境
とりあえず、環境を作らなければ話にならないので処理系をインストール。
ubuntu 7.10でprologを検索すると、これだけ出てくる。
UBUNTU-VM [0]% sudo apt-cache search prolog texlive-lang-polish - TeX Live: Polish gpp - a general-purpose preprocessor with customizable syntax gprolog - GNU Prolog compiler gprolog-doc - documentation for the GNU Prolog compiler klic - KL1 to C compiler system prolog-el - Emacs major mode for editing Prolog code source-highlight - convert source code to syntax highlighted document swi-prolog - Prolog interpreter swi-prolog-clib - Interface to system library for SWI Prolog swi-prolog-doc - Documentation for SWI-Prolog interpreter and XPCE swi-prolog-http - Interface to system library for SWI Prolog swi-prolog-semweb - Interface to system library for SWI Prolog swi-prolog-sgml - SGML/XML/HTML parser for SWI Prolog swi-prolog-table - Managing external tables for SWI Prolog swi-prolog-xpce - GUI library for SWI Prolog
とりあえず、GNU Prologが良いと聞いたのでインストール
UBUNTU-VM [0]% sudo apt-get install gprolog gprolog-doc prolog-el
.emacsには以下を追加。prologのファイルは.plらしいけど、perlとかぶる。なので、auto-mode-alistには追加しないで、-*- mode: prolog -*-でやり過ごす。
;; prolog (require 'prolog) ;(add-to-list 'auto-mode-alist '("\\.pl$" . prolog-mode)) (setq prolog-program-name "/usr/bin/gprolog") (setq prolog-consult-string "[user].\n")
これで、M-x run-prologでgprologが起動する。prolog-modeのコマンドは
C-c C-l | 現在のbufferのファイルをprologに読み込ませる |
C-c C-z | prologのbufferに移動 |
C-M-x | 指定した範囲のコードを評価する |
の三つだけらしい。
prologの終了方法
とりあえず終了させるにはhalt.を使う
prologのプログラム
最初のプログラム
%% -*- mode: prolog -*- like(troter, prolog).
インタプリタにC-M-xで入力させると
GNU Prolog 1.3.0 By Daniel Diaz Copyright (C) 1999-2007 Daniel Diaz | ?- [user]. compiling user for byte code... like(trotlike(troter, prolog). end_of_fiend_of_file. user compiled, 2 lines read - 257 bytes written, 157 ms yes | ?-
そのあと色々入力すると
| ?- like(troter, prolog). yes | ?- like(troter, php). no | ?- like(troter, ruby). no | ?-
これを見るに、prologに定義するのと、質問するのは違うらしい。
チュートリアル道理にいくと次はこれ。
%% -*- mode: prolog -*- like(troter, prolog). like(troter, ruby).
C-c C-lでプログラムを読む込ませて、
GNU Prolog 1.3.0 By Daniel Diaz Copyright (C) 1999-2007 Daniel Diaz | ?- ['like-prolog.pl']. compiling /home/takumi/work/hatena-diary/like-prolog.pl for byte code... /home/takumi/work/hatena-diary/like-prolog.pl compiled, 3 lines read - 431 bytes written, 379 ms yes | ?- like(troter, X). X = prolog ? ; X = ruby yes | ?-
GNU PrologとSWI Prologは少し挙動が違うが、;で別解を求めにいく。