无法访问Prolog中的文件

时间:2013-04-17 15:01:33

标签: prolog

我正在使用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)

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:1)

您需要引用文件名。

processFile('myFile.txt').