例如:
testif(X,Y) :-
X >= 6 ->
writeln('X> 6'),
Y>= 3 ->
writeln('X >6 and Y> 3');
writeln('X >6 and Y<3'),
writeln('X<6');
writeln('Test over').
test(X,Y):-
testif(X,Y).
?- test(7, 3).
Yes (0.00s cpu)
X> 6
X >6 and Y> 3
为什么不输出'Test over'?
?- test(4, 3).
Yes (0.00s cpu, solution 1, maybe more)
X >6 and Y<3 % why output this line?
X<6
为什么不输出'Test over'呢?
非常感谢:)
答案 0 :(得分:3)
这是在Prolog中编写(嵌套)if-then-else的惯用方法:
testif(X,Y) :-
(X >= 6 ->
writeln('X> 6'),
(Y>= 3 ->
writeln('X >6 and Y> 3')
;
writeln('X >6 and Y<3'),
)
;
writeln('X<6');
),
writeln('Test over').
与任何其他语言一样,Prolog中的缩进计数。有关样式指南,请参阅Covington et al.。
答案 1 :(得分:1)
我想这就是你想写的:
testif(X,Y) :-
X >= 6 ->
(writeln('X>= 6'), Y>=3 -> writeln('X >=6 and Y>=3'); writeln('X >=6 and Y<=3')) ;
writeln('X<6'),
writeln('Test over').
test(X,Y):-
testif(X,Y).
;
表示or
,,
表示Prolog中的and
,我认为您应该用括号分隔它们,并确保条款的含义符合您的预期。< / p>