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?