使用prolog与emacs

时间:2011-03-13 07:10:56

标签: emacs prolog emacs23

GNU Emacs 23.2.1
Fedora xfce 14

我开始进入Prolog,我想将我的emacs用作在Prolog中编程的IDE。

目前我使用emacs进行c / c ++。但不知道如何开始使用Prolog。我知道emacs有一个用于emacs编程的内置库。但是,我研究并发现它的功能较少,即没有语法高亮,缩进等。

所以我已经下载了emacs prackage Prolog.el。我使用M-X Load-library加载了这个库。

但是,我不知道在那之后该怎么做。如何编译我的prolog文件?在emacs IDE的菜单中,Prolog没有任何内容。

我是否还需要为Prolog下载一些解释器或编译器?是否有用于编译的emacs命令?我通常在编译c代码时在emacs中使用make。

我做了一个yum搜索序言并得到了这些结果,所以我需要哪些选择?:

gprolog.x86_64 : GNU Prolog is a free Prolog compiler
pl.x86_64 : SWI-Prolog - Edinburgh compatible Prolog compiler
pl-static.x86_64 : Static library for SWI Prolog
ppl-gprolog.x86_64 : The GNU Prolog interface of the Parma Polyhedra Library
ppl-gprolog-static.x86_64 : The static archive for the GNU Prolog interface of the Parma Polyhedra Library
ppl-swiprolog.x86_64 : The SWI-Prolog interface of the Parma Polyhedra Library
ppl-swiprolog-static.x86_64 : The static archive for the SWI-Prolog interface of the Parma Polyhedra Library
ppl-yap.x86_64 : The YAP Prolog interface of the Parma Polyhedra Library
yap.i686 : High-performance Prolog Compiler
yap.x86_64 : High-performance Prolog Compiler

非常感谢任何建议,

==================编辑=====================

我安装了以下pl.x86_64

我已下载prolog.el并将其放在以下目录中:

~/.emacs.d/site-lisp/prolog/prolog.el

我已经使用以下内容配置了我的emacs:

;;; Prolog mode
(setq load-path (cons "~/.emacs.d/site-lisp/prolog/prolog.el" load-path))
(autoload 'run-prolog "prolog" "Start a Prolog sub-process." t)
(autoload 'prolog-mode "prolog" "Major mode for editing prolog programs." t)
(setq prolog-system 'swi) ; prolog-system below for possible values
(setq auto-mode-alist (append '(("\\.pl$" . prolog-mode))
                              auto-mode-alist))

因此,当我将文件保存为* .pl时,我会获得prolog菜单选项。

所以我写了一些prolog代码,从prolog菜单中选择Run interactive prolog session

我打开第二个空白缓冲区,显示(Inferior Prolog:run Shell-Compile)

但是,我不确定在这个阶段我需要做什么。如何编译和运行prolog文件?

非常感谢任何进一步的支持。

8 个答案:

答案 0 :(得分:10)

您没有使用预期的高级prolog.el,因为您的加载路径错误。它应该是:

(setq load-path (cons "~/.emacs.d/site-lisp/prolog/" load-path))

请注意我从路径末尾删除了prolog.el。实际上,它应该更好地阅读:

(add-to-list 'load-path  "~/.emacs.d/site-lisp/prolog/")

然后再次启动Emacs,它应该为您提供一个包含更多选项的菜单。 (尝试C-h v prolog-mode-version,仅适用于高级模式,并显示其版本号。)

然后,您可以尝试C-c C-b查询缓冲区等。还可以考虑使用 ediprolog ,您可以使用它来直接在Emacs缓冲区中评估查询。另请注意,在最近的Emacs版本中,高级Prolog模式的变体是新的默认值,但遗憾的是它带有严重的回归和缺陷,因此我推荐Stefan Bruda维护的原始版本:

<强> https://bruda.ca/emacs/prolog_mode_for_emacs

有关Prolog和Emacs的更多信息,请参阅 Using SWI-Prolog with GNU Emacs

答案 1 :(得分:7)

您需要Prolog环境,例如SWI-Prolog,GNU-Prolog或YAP。我认为SWI是非常常用的,但我不知道它是否比其他人更好。您不需要编译Prolog文件来运行它们 - Prolog可以作为解释器(在某些情况下是交互式编译器)。要将文件加载到Prolog环境中,您需要查询它。在Prolog模式下,emacs可以使用C-c C-f执行此操作。您也可以直接从Prolog shell consult(File)输入。

答案 2 :(得分:2)

可在此处找到更完整的prolog模式:Prolog mode for (X)Emacs 如果在.el文件中搜索字符串prolog-mode-keybindings或在prolog模式下执行C-h b,则可以看到可用的内容。

如果您安装pl.x86_64: 您还可以使用名为PceEmacs的SWI Prolog内置编辑器,请参阅此处:The SWI-Prolog builtin editor: PceEmacs SWI Prolog非常完整,除了图形化调试器The graphical tracer及其自己的GUI系统{{}外,还包括基于文本的调试器。 3}}加上很多库。这是一个伟大的探索序幕。如果您想使用emacs改为使用SWI Prolog,这里是设置The XPCE GUI system for Prolog

答案 3 :(得分:2)

另一种具有良好emacs模式的替代方案是Ciao

答案 4 :(得分:2)

  1. 仔细阅读prolog.pl的安装说明 - http://bruda.ca/emacs-prolog/install.html

  2. 回应3月20日写的'mat',使用`add-to-list'代替`setq':

    (add-to-list'load-path“〜/ .emacs.d / site-lisp / prolog /”)

    这是“现代”用法,应该比“setq”构造更清晰。

  3. 我没有仔细阅读bruda.ca中的prolog.el代码,但确实看起来有点过时了。但是,它看起来还有比GNU Emacs中包含的代码更多的功能。我不知道附加功能是否会超过代码的老化程度。似乎bruda.ca代码源自早期版本的GNU Emacs prolog.el,如bruda.ca代码中的注释中所述。

  4. 一旦你纠正了`load-path'变量的值(它类似于PATH环境变量),prolog.el应该正确加载。因为没有prolog.el的文档文件,所以这里有一些Emacs命令可以用来开始探索prolog模式:

    C-h m - 这将显示帮助,列出为prolog-mode定义的键绑定,以及您可能生效的任何其他次要模式。

    C-h a prolog - 这将显示由prolog-mode(prolog.el)定义的列表(交互式)命令的帮助。

    如果您尚未关闭菜单,则只要在prolog模式下打开文件,就可以使用prolog的菜单条目。

  5. 最后,总是会读取prolog.el(至少是文件顶部的描述性注释)。 (该文件的后半部分被列为实验代码。)如果可以更新并添加到GNU Emacs中包含的prolog.el中,那将是一件好事。

答案 5 :(得分:1)

你需要一个Prolog编译器,所以你必须安装一个列出的编译器。然后,我想您编写了一个Makefile并通过M-x compile调用它。

答案 6 :(得分:1)

如果您使用的是Emacs包管理器,则可以键入M-x package-install RET prolog,然后重新加载Emacs。

简单而有效。

我使用Fedora 15,但Emacs是它自己的操作系统。

答案 7 :(得分:0)

进入swi-prolog命令行并输入:

np.sum