2011-02-26 49 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。

相關問題