如何使用嵌套if

时间:2011-04-13 16:59:44

标签: prolog

例如:

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'呢?

非常感谢:)

2 个答案:

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