1

我是 SWI-Prolog 的新手,正在尝试一些教程。但是,我尝试通过命令行加载的每个文件都会收到 2 条错误消息 - 一条在开头(预期为操作员),一条在结尾(意外结束文件)。文件保存在与我正在工作的目录相同的目录中。

例如,我将此文件保存为 kb2.pl

listensToMusic(mia).  
happy(yolanda).   
playsAirGuitar(mia) :- listensToMusic(mia).   
playsAirGuitar(yolanda) :- listensToMusic(yolanda).
listensToMusic(yolanda):- happy(yolanda).  

从打开 Prolog 开始(通过 /opt/local/bin/swipl),我的命令行如下所示:

% library(swi_hooks) 编译成 pce_swi_hooks 0.00 秒,3,928 字节
欢迎使用 SWI-Prolog(多线程,64 位,版本 5.10.2)
版权所有 (c) 1990-2010 University of Amsterdam, VU Amsterdam
SWI-Prolog 绝对附带没有保修。这是免费软件,
欢迎您在特定条件下重新分发它。
详情请访问http://www.swi-prolog.org

帮助,使用?-帮助(主题)。或 ?- apropos(Word)。

?- [kb2]。
错误:/Users/name/Desktop/kb2.pl:1:0:语法错误:操作员预期
错误:/Users/name/Desktop/kb2.pl:10:52:语法错误:文件意外结束
% kb2 编译 0.00秒,2,584 字节为
真。

?-

当我询问已编译文件的列表时,我得到:

\快乐(约兰达)。
\playsAirGuitar(mia) :- 听音乐(mia)。
\playsAirGuitar(约兰达):- 听音乐(约兰达)。
真的。

所以它会删除文件的第一行和最后一行。

我在网上搜索了这些错误消息,发现了很多关于 Prolog 格式化的有用提示,但没有一个能解决这种情况。是否有某种特殊字符或格式应该用于 Prolog 文件的开头和结尾?

4

2 回答 2

1

你在哪个操作系统上?您确定文件是 ASCII(而不是 UTF-16)吗?它是否具有您平台的本地行结尾?您可以发布整个文件(原始文件)以便人们检查吗?

于 2011-02-26T21:34:33.763 回答
0

许多 Prolog 系统,例如 SWI-Prolog、Jekejeke Prolog,允许将 BOM 检测为文本文件的第一个字符。BOM 是一些空格,表示文本文件的编码:

254 255          UTF-16BE
255 254          UTF-16LE
239 187 191      UTF-8

所以没有必要限制自己使用 ASCII。许多文本编辑器会为您放置 BOM。而 SWI-Prolog,Jekejeke Prolog,默认探测 BOM。

于 2017-08-22T16:25:39.853 回答