Obtendo um pedido em resolução predicada
Olhe para os seguintes objetivos (estou usando o swi-prolog com o clpfd de Markus Triska):
result(Input,Result) :-
Input #> 10,
Result=decline.
result(Input,Result) :-
Input in 0..20,
Result=offer.
Uma consulta possível é assim:
?- result(15,B).
B = decline ;
B = offer.
Eu quero adicionar um pedido ou algum tipo de prioridade de solução. Se "declinar" for uma resposta válida paraInput=15
, então o segundo objetivo não deve ser mais considerado, de modo que apenasB=decline
é uma solução, mas nãoB=offer
.
Eu sei que eu poderia adicionar um!/0
mas o contrário não funcionaria. Dê-me todas as respostas possíveis para este predicado.
Considerando este exemplo, umResult=offer
só deve ser verdade paraInput 0..10
, porque senão a meta de declínio anterior maior deveria ser disparada.
Estou pensando muito imperativo quando tento considerar uma ordem dentro de predicados?