Получение порядка в разрешении предикатов

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

Думаю ли я слишком императивным, когда пытаюсь рассмотреть порядок в предикатах?

Ответы на вопрос(4)

Ваш ответ на вопрос