【问题标题】:Can't access to a file in Prolog, always read the end_of_file atom无法访问 Prolog 中的文件,始终读取 end_of_file 原子
【发布时间】: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


【解决方案1】:

您必须使用tell/1 来写入 文件,然后被告知恢复到以前的状态。使用 see/1 您正在阅读,它是空的...

但是 ISO IO 更好...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2012-05-03
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多