【发布时间】:2013-04-18 08:42:30
【问题描述】:
我正在使用 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 原子并且无法继续。
为什么?我能做些什么来解决它并写入这个文件?
【问题讨论】:
-
请张贴(部分)文件...
-
什么文件?我的文件?它是空的(我有一个空文件,我会在其中写入我从键盘读取的内容)我错过了什么? tnx 这么多
标签: prolog