今天发现一个好用的EMACS Lisp程序,该程序可以极大的提高emacs编写SWI-Prolog程序时的方便度,当写完一些facts和rules后,不用切换到SWI-Prolog 中去 consult and check 刚写好的代码. 可以直接在emacs中当前的buffer中测试运行效果。非常方便。
该Lisp程序叫做ediprolog 0.9y — Emacs Does Interactive Prolog.
安装:
- 把ediprolog.el文件拷贝到你的emacs的lisp程序库目录下。Ubuntu用户可以直接将该文件拷贝到/etc/emacs/site-start.d/下,然后将文件名前面加一个数字前缀,比如60ediprolog.el。这样emacs在启动的时候就会自动读取该lisp文件了。
- 修改你的.emacs文件,加入
(require ‘ediprolog)
(global-set-key [f10] ‘ediprolog-dwim) - 重新启动并且输入
M-x customize-group RET ediprolog RET
根据你的需要修改相应的设置,一般来说不用修改了。
用法:
当你写了一部分程序后,比如说如下的程序:
%% The facts
male(yanghuai).
male(zhangxiangzhen).
mail(yangbinglin).
female(zhanghuiqing).
female(yangjingwen).
parent(zhangxiangzhen, yanghuai).
parent(zhangxiangzhen, zhanghuiqing).
parent(yanghuai, yangbinglin).
parent(yanghuai, yangjingwen).
parent(zhanghuiqing, yangbinglin).
parent(zhanghuiqing, yangjingwen).
%% The rules
grandfather(GrandFather, GrandSon):-
male(GrandFather),
parent(GrandFather, Child),
parent(Child, GrandSon).
然后,你就可以直接在该编辑区域内输入
%?- grandfather(X,Y). (注意,前面的%?-后面有一个空格)
接着按下F10, SWI-Prolog就回自动将程序运行结果输出在当前窗口,以便查看程序是否是按设计运行的。在我的例子中会输出以下内容:
%?- grandfather(X,Y).
%@
%@ X = zhangxiangzhen,
%@ Y = yangbinglin ;
%@
%@ X = zhangxiangzhen,
%@ Y = yangjingwen ;
基本用法说完了,其实所有的使用方法都在该lisp程序开始的注释中,自己看看也就清楚了。