SWI Prolog 读取输入流错误
我将用户输入重定向到文件 see('entradasaida.txt')
。效果很好。 虽然,当我尝试从该流输入文件中读取时,swi 给了我这个错误:
ERROR: entradasaida.txt:3:0: Syntax error: Operator expected.
为什么?我该如何修复这个错误?
liste(A) :-
see(A),
nl,
read(B),
escreva(B),
seen.
escreva(A) :-
write(A),
nl,
A==end-of-file, !.
escreva(_) :-
read(A),
escreva(A).
18 ?- liste('entradasaida.txt').
ERROR: entradasaida.txt:2:0: Syntax error: Operator expected
19 ?- trace.
true.
[trace] 19 ?- liste('entradasaida.txt').
Call: (6) liste('entradasaida.txt') ? creep
Call: (7) see('entradasaida.txt') ? creep
Exit: (7) see('entradasaida.txt') ? creep
Call: (7) nl ? creep
Exit: (7) nl ? creep
Call: (7) read(_G627) ? creep
ERROR: entradasaida.txt:3:0: Syntax error: Operator expected
Exception: (7) read(_G648) ? creep
Exception: (6) liste('entradasaida.txt') ? creep
I'm redirectioning the user input to a file see('entradasaida.txt')
. That works good.
Although, when I try to read from that stream input file swi gives me this error:
ERROR: entradasaida.txt:3:0: Syntax error: Operator expected.
Why? How can I fix this error?
liste(A) :-
see(A),
nl,
read(B),
escreva(B),
seen.
escreva(A) :-
write(A),
nl,
A==end-of-file, !.
escreva(_) :-
read(A),
escreva(A).
18 ?- liste('entradasaida.txt').
ERROR: entradasaida.txt:2:0: Syntax error: Operator expected
19 ?- trace.
true.
[trace] 19 ?- liste('entradasaida.txt').
Call: (6) liste('entradasaida.txt') ? creep
Call: (7) see('entradasaida.txt') ? creep
Exit: (7) see('entradasaida.txt') ? creep
Call: (7) nl ? creep
Exit: (7) nl ? creep
Call: (7) read(_G627) ? creep
ERROR: entradasaida.txt:3:0: Syntax error: Operator expected
Exception: (7) read(_G648) ? creep
Exception: (6) liste('entradasaida.txt') ? creep
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我发现了我的错误。
文件 entradasaida.txt 包含一些不以句点(“.”)结尾的行。
因此,读取命令会对该消息做出反应(错误:entradasaida.txt:2:0:语法错误:需要运算符)。
I found my mistake.
The file entradasaida.txt contains some lines that doesn't end with a period ('.').
So, the read command reacts with that message (ERROR: entradasaida.txt:2:0: Syntax error: Operator expected).