这是我使用的代码的一部分,如果没有 -
foo(4,Lines,A) :-
....
.....
1. ( (X1\=X2) ->write ('Bye')
2. ; (X1 = X2,X3=X4,N\=4) ->write('Hello'),nl,D is A + 4,write(D),
foo(4,lines,D)
3. ).
所以这是在line2中打印Hello然后它给出了一个错误。它不是打印值D.TH是我得到的错误 -
ERROR: at_end_of_stream/1: stream `<stream>(000000000894F470)' does not exist
第2行中的D is A + 4
是否有问题,因为这就是错误的原因???
答案 0 :(得分:0)
我认为您的代码没有任何问题。唯一的错误发生在write ('Bye')
,你有一个空间我删除了它。也许D
的价值出现了问题。看到这个,它对我有用:
foo(4,Lines,A):- /*read(X1),read(X2),read(X3),read(X4),read(A),read(N),*/
((X1\=X2) -> write('Bye');
(X1 = X2,X3=X4,N\=4) -> write('Hello'),nl,D is A + 4,write(D),
foo(4,lines,D)).
我添加了read/1
,因此我可以测试代码。这个对我有用。这就是我得到的:
3 ?- foo(4,Lines,A).
|: 1. /*read(X1)*/
|: 1. /*read(X2)*/
|: 2. /*read(X3)*/
|: 2. /*read(X4)*/
|: 3. /*read(A)*/
|: 3. /*read(N)*/
Hello
7
|: 1.
|: 1.
|: 2.
|: 2.
|: 3.
false.
在Hello 7
之后,规则foo/3
再次运行。我希望你会做别的事情,但我看不清楚,所以这就是我的结果。
有关您收到的错误的更多信息(at_end_of_stream
),请检查链接。
读取指定流的最后一个字符后成功,或者Stream不是有效的输入流。流末端测试仅适用于缓冲输入流(很少使用无缓冲输入流;请参见open / 4)。