Получение порядка в разрешении предикатов
Посмотрите на следующие цели (я использую swi-пролог с clpfd от Маркуса Триски):
result(Input,Result) :-
Input #> 10,
Result=decline.
result(Input,Result) :-
Input in 0..20,
Result=offer.
Возможный запрос выглядит так:
?- result(15,B).
B = decline ;
B = offer.
Я хочу добавить заказ или какой-то приоритет решения. Если "спад» является действительным ответом дляInput=15
то вторая цель больше не должна рассматриваться, так что толькоB=decline
это решение, но нет.B=offer
Я знаю, что я мог бы добавить!/0
но тогда наоборот не сработает. Дайте мне все возможные ответы для этого предиката.
Учитывая этот пример,Result=offer
должно быть верно только дляInput 0..10
, потому что в противном случае более высокая цель предшествующего снижения должна выстрелить.
Думаю ли я слишком императивным, когда пытаюсь рассмотреть порядок в предикатах?