【发布时间】:2015-07-16 20:39:27
【问题描述】:
我正在尝试编写一个谓词来接受输入文件中的一行。每次使用它时,它应该给出下一行,直到它到达文件的末尾,此时它应该返回 false。像这样的:
database :-
see('blah.txt'),
loop,
seen.
loop :-
accept_line(Line),
write('I found a line.\n'),
loop.
accept_line([Char | Rest]) :-
get0(Char),
C =\= "\n",
!,
accept_line(Rest).
accept_line([]).
显然这行不通。它适用于输入文件的第一行,然后无限循环。我可以看到我需要在某处有一些像“C =\= -1”这样的行来检查文件的结尾,但我看不到它会去哪里。
所以一个示例输入和输出可以是......
INPUT
this is
an example
OUTPUT
I found a line.
I found a line.
还是我这样做完全错了?也许有一个内置规则可以简单地做到这一点?
【问题讨论】:
标签: file-io prolog swi-prolog