Ustalenie kolejności w predykatowej rozdzielczości

Spójrz na następujące cele (używam swi-prologu z clpfd od Markusa Triska):

result(Input,Result) :-
    Input #> 10,
    Result=decline.
result(Input,Result) :-
    Input in 0..20,
    Result=offer.

Możliwe zapytanie wygląda tak:

?- result(15,B).
B = decline ;
B = offer.

Chcę dodać zamówienie lub jakiś priorytet rozwiązania. Jeśli „spadek” jest prawidłową odpowiedzią naInput=15, więc drugi cel nie powinien być już brany pod uwagę, więc tylkoB=decline jest rozwiązaniem, ale nieB=offer.

Wiem, że mógłbym dodać!/0 ale wtedy odwrotna sytuacja nie zadziała. Daj mi wszystkie możliwe odpowiedzi na ten predykat.

Biorąc pod uwagę ten przykład,Result=offer powinno być prawdziwe tylko dlaInput 0..10, ponieważ w przeciwnym razie powinien strzelić wyższy cel wcześniejszego spadku.

Czy myślę zbyt imperatywnie, gdy próbuję rozważyć zamówienie w orzecznictwie?

questionAnswers(4)

yourAnswerToTheQuestion