En anidada if-then-else, es común omitir paréntesis redundantes, obteniéndose:
min(List1, List2, Output) :-
length(List1, N),
length(List2, M),
( N < M -> Output = true
; N =:= M -> Output = equal
; Output = other
).
En Prolog, es una buena práctica de usar coincidencia de patrones cuando sea posible, ya que esto produce más general, más Decla programas más fáciles de leer que usar if-then-else. Para este caso particular de condiciones, consulte el predicado de biblioteca compare/3
. compare/3
le permite Reify la relación de las dos longitudes en un átomo, y se puede utilizar ese átomo para describir las tres condiciones con la coincidencia de modelos:
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).
consultas de ejemplo y resultados:
?- lists_output([_,_], [_,_,_], Output).
Output = true.
?- lists_output([_,_,_], [_,_,_], Output).
Output = equal.
?- lists_output([_,_,_,_], [_,_,_], Output).
Output = other.
¿Qué, exactamente , no parece funcionar? ¿Recibes respuestas que no esperas o no compila? – sharky