in Uncategorized

An useful emacs lisp program for interactiving writing Prolog code.

今天发现一个好用的EMACS Lisp程序,该程序可以极大的提高emacs编写SWI-Prolog程序时的方便度,当写完一些facts和rules后,不用切换到SWI-Prolog 中去 consult and check 刚写好的代码. 可以直接在emacs中当前的buffer中测试运行效果。非常方便。

该Lisp程序叫做ediprolog 0.9y — Emacs Does Interactive Prolog.
安装:

  1. 把ediprolog.el文件拷贝到你的emacs的lisp程序库目录下。Ubuntu用户可以直接将该文件拷贝到/etc/emacs/site-start.d/下,然后将文件名前面加一个数字前缀,比如60ediprolog.el。这样emacs在启动的时候就会自动读取该lisp文件了。
  2. 修改你的.emacs文件,加入
    (require ‘ediprolog)
    (global-set-key [f10] ‘ediprolog-dwim)
  3. 重新启动并且输入
    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程序开始的注释中,自己看看也就清楚了。

Write a Comment

Comment