Dans imbriquée if-then-else, il est courant d'omettre les parenthèses redondantes, rendement:
min(List1, List2, Output) :-
length(List1, N),
length(List2, M),
( N < M -> Output = true
; N =:= M -> Output = equal
; Output = other
).
En Prolog, il est bon d'utiliser modèle correspondant lorsque cela est possible, car cela donne plus général, plus décla programmes ratifs et plus lisibles que d'utiliser if-then-else. Pour ce cas particulier de conditions, consultez le prédicat de bibliothèque compare/3
. compare/3
vous permet de réifier la relation des deux longueurs dans un atome, et vous pouvez utiliser cet atome pour décrire les trois conditions avec correspondance de motif:
lists_output(List1, List2, Output) :-
length(List1, L1),
length(List2, L2),
compare(Order, L1, L2),
order_output(Order, Output).
order_output(<, true).
order_output(=, equal).
order_output(>, other).
exemples de requêtes et résultats:
?- lists_output([_,_], [_,_,_], Output).
Output = true.
?- lists_output([_,_,_], [_,_,_], Output).
Output = equal.
?- lists_output([_,_,_,_], [_,_,_], Output).
Output = other.
Qu'est-ce, exactement , ne semble pas fonctionner? Obtenez-vous des réponses auxquelles vous ne vous attendez pas ou ne compilez-vous pas? – sharky