GnuEmacsでPrologを使う
prolog.elが新しいもの用ページ(ver. 1.19以降)
%% これは、筆者が
技術評論社 刊 ソフトウェアデザイン誌
「つこてなんぼのFreeBSD」
1998年11月
に掲載した原稿をもとにしたものです %%
2022/FEB/226更新
2009/FEB/22更新
2007/FEB/12更新
Prolog処理系を動かして、右も左もわからない時は、
「
Prologを使う(動作確認 程度のProlog入門)」
を見てください。
Gnu EmacsとPrologを一緒に使う
Prologは、対話的に使用しますが、そのトップレベルは一般的に貧弱です。
対話的に使用する言語は、Gnu Emacsから使うのが常道です。
Prologもemacs(mule)から起動すると非常に便利です。
0)prolog.elについて
prolog.el中に、
(defvar prolog-mode-version "1.9"
"Prolog mode version number")
というバージョンを明記する部分が無ければ、古い prolog.elです。
--- Ubuntu 21.10版 Gnu emacsでprolog.el を確認するには、
$ gunzip < /usr/share/emacs/27.1/lisp/progmodes/prolog.el.gz | less
で、先頭の方にある
(defvar prolog-mode-version "1.22"
"Prolog mode version number.")
を確認します。
prolog-mode-version が "1.9" 以降であれば、本ページの情報が使えます。
---
古いものの場合は、
古い prolog.el用ページを見てください。
以下では、新しい prolog.el 用の説明をします。
0.5) Ubuntu 21.10でswi-prologをインストールする
Ubuntu 21.10版で SWI-Prologをインストールするには
$ sudo apt install swi-prolog
するだけです。
SWI-Prologの、起動&実行は
$ swipl
で、行います。
素のターミナルで対話的に使用するのは、かなりしんどいので…
「?-」のプロンプトが確認できたら、
^Dを入力して、終了します。
1) .emacs設定
emacsに標準のprolog.elは、そもそも元富士通研究所の梅田さんが書かれたものなの
ですが、C-PrologとQuintus Prolog用のもので、今のPrologにはLisp変数の初期値
が不適当です。
そこで、~/.emacsなどに以下のような記述を行います。
処理系ごとに、異なる設定が必要です。
--- Ubuntu 21.10での~/.emacs設定。
~/.emacsに下記の行を追加します。
; for SWI-Prolog
(setq prolog-system 'swi)
(setq prolog-program-name "/usr/bin/swipl")
(setq auto-mode-alist
(append '(("\\.pl" . prolog-mode))
auto-mode-alist))
--- end
--- FreeBSD版 SWI-Prolog
(GNU Emacs 21.3.1 / prolog.elの prolog-mode-version が "1.9")
; for SWI-Prolog
(setq prolog-system 'swi)
(setq auto-mode-alist
(append '(("\\.pl" . prolog-mode))
auto-mode-alist))
(setq prolog-program-name "/usr/local/bin/pl")
--- end
と記述します。
prolog.elに、各処理系ごとの動作が書かれています。
よって、prolog-system という変数に適切なシステム名をセットするだけで、
簡単に色んな機能を利用できます。
2)使い方
そしてemacsを起動したのち、M-x run-prologとして、prologを起動します。
その後、M-x 2 で窓を2つに分割し、片方でソースを編集すると非常に便利です。
(参考 Prologコード→ test.prolog)
そして、ソースを編集している窓から、簡単なキー操作で、Prolog処理系へソー
スを読み込ませることができます。
その方法は、
- 送り込みたい節の頭でマーキング(C-space)を行う
- 送り込みたい部分の最後にカーソルを移動
- C-C,C-Rを押下
すると、指定したリージョンが自動的にconsultされます。
これで、もう、Prologマシンは不用になりましたね。:-)
emacsのprologモードでは、インデントを自動的につけてくれます。
Prologのコメントは「%」で開始した行です。
emacsのprologモードの場合、%%がパラグラフの開始で、%は通常のコメントです。
3) prolog.el 1.9版のキーマップ
共通
C-c,?
| 述語(predicate)のヘルプ
|
C-c,/
| ヘルプ(アプロポス(入力した単語を含む節のヘルプを表示))
|
C-c,C-d
| デバッグ On
|
C-c,C-t
| トレース On
|
C-c,r
| Prolog起動
|
編集
M-a
| 節(clause)の始まりへ移動
|
M-e
| 節(clause)の終わりへ移動
|
C-M-a
| 述語(predicate)定義の始まりへ移動
|
C-M-e
| 述語(predicate)定義の終わりへ移動
|
M-C-c
| 節(clause)にマーク
|
M-C-h
| 述語(predicate)にマーク
|
M-C-n
| リストを進む
|
M-C-p
| リストを戻る
|
C-c,C-n
| 述語(predicate)のテンプレートを挿入
|
C-c,C-s
| 述語(predicate)のスペックを挿入
|
M-r
| 次の節(clause)を挿入
|
C-c,C-v,a
| 変数をアノニマス('_')に置き換える
|
C-c,C-v,C-s
| 述語(predicate)のスペックを見る
|
C-m (通常は[Enter])
| 改行して、インデント
|
C-c,C-p
| 述語(predicate)をコンサルトする
|
C-c,C-r
| リージョンをコンサルトする
|
C-c,C-b
| バッファをコンサルトする
|
C-c,C-f
| ファイルをコンサルトする
|
C-c,C-c,p
| 述語(predicate)をコンパイルする
|
C-c,C-c,r
| リージョンをコンパイルする
|
C-c,C-c,b
| バッファをコンパイルする
|
C-c,C-c,f
| ファイルをコンパイルする
|
4) 参考にならない、僕のページ
たけおかのPrologページ 目次
Prologの入門文書に飽きた人に
Prologを使う(動作確認 程度のProlog入門)
実際にProlog処理系を使ったときの、あれこれ
Prologで記述した、StarTrek(1976年頃流行した古いゲーム)
たけおか(竹岡尚三)のホームページ
--- EOF