2011-02-26 45 views
2

我是SWI-Prolog的新手,正在尝试一些教程。然而,我尝试通过命令行加载的每个文件都会得到2个错误消息 - 一个在开始时(操作员期望)和一个在结尾(文件意外结束)。文件保存在同一目录中的一个,我在工作。SWI-Prolog文件是否需要开始和结束字符?

例如,我有这个文件保存为kb2.pl

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

从打开的Prolog开始(通过/选择/ local/bin目录/ swipl),我的命令行看起来是这样的:

% library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 3,928 bytes
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.10.2)
Copyright (c) 1990-2010 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

help, use ?- help(Topic). or ?- apropos(Word).

?- [kb2].
ERROR: /Users/name/Desktop/kb2.pl:1:0: Syntax error: Operator expected
ERROR: /Users/name/Desktop/kb2.pl:10:52: Syntax error: Unexpected end of file
% kb2 compiled 0.00 sec, 2,584 bytes
true.

?-

当我问编译的文件的清单,我得到:

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

因此它将剪切文件的第一行和最后一行。

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

回答

1

你在哪个操作系统上?你确定该文件是ASCII(而不是UTF-16)吗?它的本地行结束了吗?你可以发布整个文件(原始),以便人们检查它吗?

+0

我重新格式化了上面的文本,并且可以将它复制到SWI Prolog中(使用'with(user)')就好了。 – 2011-02-26 21:36:26

+0

它采用Rich Text Format(我认为是UTF-16)。我只是将它切换到ASCII,现在它可以工作 - 谢谢!然而,下一次,我将如何发布整个原始文件?我可以直接上传堆栈溢出吗? – Kristen 2011-02-26 22:25:11

+2

@Kristen:RTF(RTF格式)是微软很早以前就开始的一种文字处理格式。 SWI-Prolog毫无疑问会对包含这些文件文本的额外字体和其他“格式化”命令产生困难。您可以在简单的文本编辑器中打开RTF文件,并为自己查看额外的字符。 – hardmath 2011-02-27 16:19:53

0

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

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

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

相关问题