SWI Prolog 读取输入流错误

发布于 2024-10-29 09:46:29 字数 931 浏览 3 评论 0原文

我将用户输入重定向到文件 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青芜 2024-11-05 09:46:29

我发现了我的错误。
文件 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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文