Conseguir un pedido en resolución predicada
Mire los siguientes objetivos (estoy usando swi-prolog con clpfd de Markus Triska):
result(Input,Result) :-
Input #> 10,
Result=decline.
result(Input,Result) :-
Input in 0..20,
Result=offer.
Una posible consulta se ve así:
?- result(15,B).
B = decline ;
B = offer.
Quiero agregar una orden o algún tipo de prioridad de solución. Si "rechazar" es una respuesta válida paraInput=15
, entonces el segundo objetivo ya no debe ser considerado, por lo que soloB=decline
es una solución pero noB=offer
.
Sé que podría agregar un!/0
pero entonces al revés no funcionaría. Dame todas las respuestas posibles para este predicado.
Teniendo en cuenta este ejemplo, unResult=offer
solo debe ser verdad paraInput 0..10
, porque de lo contrario el mayor objetivo de declive anterior debería disparar.
¿Estoy pensando demasiado imperativo cuando trato de considerar un orden dentro de predicados?