Как использовать вложенный, если - PullRequest
1 голос
/ 13 апреля 2011

, например:

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 ]

3 голосов
/ 14 апреля 2011

Это идиоматический способ написания (вложенного) 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').

Как и на любом другом языке, отступ имеет значение в Прологе.См. Covington и др. для руководства по стилю.

1 голос
/ 13 апреля 2011

Полагаю, это то, что вы хотите написать:

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 и , означает and в Прологе, я думаю, вам следует заключить их в скобки, чтобы убедиться, что значения предложений соответствуют вашим ожиданиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...