0

我正在使用 SWI-Prolog 研究 Prolog。

我发现以下示例存在一些问题,这些示例只是访问文件并将用户放入 Prolog Shell 中的内容写入其中。

processFile(File) :- see(File),
                 processFile,
                 seen.

processFile :- read(Query),
               process(Query).

process(end_of_file) :- !.

process(Query) :- Query,
                  write(Query),
              nl,
              processFile.

问题是,当我在 Prolog shell 中尝试使用文件名执行 processFile 语句时,我得到一个错误:

如果我给出带有扩展名的文件名,则会收到此错误消息(似乎将扩展名解释为运算符):

7 ?- processFile(myFile.txt).
ERROR: Syntax error: Operator expected
ERROR: processFile(myFile
ERROR: ** here **
ERROR: .txt) . 

如果我给出一个不带扩展名的文件名,我会收到其他错误消息(文件不存在):

7 ?- processFile(myFile).
ERROR: see/1: source_sink `myFile' does not exist (No such file or directory)

因此,我还尝试在 prolog 源代码文件所在的同一文件夹中创建一个名为myFile (不带扩展名)的新文件,但我仍然再次获得:

8 ?- processFile(myFile).
ERROR: see/1: source_sink `myFile' does not exist (No such file or directory)

为什么?错误在哪里?我该如何解决?

4

2 回答 2

9

正如@larsmans 所说,使用单引号。

如果您确定文件存在,则“不存在”错误可能是因为当前工作目录不是您所想的那样。

尝试将当前工作目录更改为 .txt 文件所在的位置cd('directory-path-here')

于 2013-04-17T17:03:06.923 回答
1

您需要引用文件名。

processFile('myFile.txt').
于 2013-04-17T15:35:00.637 回答