使用IF-Else Prolog进行分配时出错

时间:2014-09-27 19:26:35

标签: prolog

这是我使用的代码的一部分,如果没有 -

   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是否有问题,因为这就是错误的原因???

1 个答案:

答案 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)。