我正在使用 SWI Prolog 研究 Prolog,我发现一些与文件读写操作相关的困难。
我有这个简单的程序,它从标准输入(键盘)读取一些内容并将其写入文件:
processFile(File) :- see(File),
processFile,
seen.
processFile :- read(Query),
process(Query).
process(end_of_file) :- !.
process(Query) :- Query,
write(Query),
nl,
processFile.
我正在尝试在 Linux 下执行它。因此,在 bash 中,我进入 Prolog 源文件和myFile文件所在的文件夹,之后我咨询了程序,我执行以下语句:
?- processFile(myFile).
true.
正如你所看到的那样,这个问题给了我真实的信息,但我无法通过键盘插入任何东西,所以任何东西都可以写入myFile文件。
如果我尝试追踪发生的事情,我会获得以下信息:
[trace] ?- processFile(myFile).
Call: (6) processFile(myFile) ? creep
Call: (7) see(myFile) ? creep
Exit: (7) see(myFile) ? creep
Call: (7) processFile ? creep
Call: (8) read(_G697) ? creep
Exit: (8) read(end_of_file) ? creep
Call: (8) process(end_of_file) ? creep
Exit: (8) process(end_of_file) ? creep
Exit: (7) processFile ? creep
Call: (7) seen ? creep
Exit: (7) seen ? creep
Exit: (6) processFile(myFile) ? creep
true.
如您所见,它可以访问myFile文件,并正确询问包含read语句的processFile谓词,但似乎自动读取end_of_file原子并且无法继续。
为什么?我能做些什么来解决它并写入这个文件?