Confiando en el orden de las reglas
Para calcular la distancia de Hamming entre dos listas de la misma longitud, utilizofoldl(hamm, A, B, 0, R).
con esta definicion dehamm/4
:
hamm(A, A, V, V) :- !.
hamm(A, B, V0, V1) :- A \= B, V1 is V0 + 1.
El corte en la primera regla evita el retroceso innecesario. La segunda regla, sin embargo, podría haberse escrito de manera diferente:
hamm2(A, A, V, V) :- !.
hamm2(_, _, V0, V1) :- V1 is V0 + 1.
yhamm2/4
todavía será correcto junto confoldl/5
o para consultas donde tanto A como B son molidas.
Entonces, ¿hay una buena razón para preferir el uno sobre el otro? ¿O hay una razón para mantener las reglas en ese orden o cambiarlas?
Sé que la consulta
hamm(a, B, 0, 1).
es falso, mientras
hamm2(a, B, 0, 1).
Es cierto, pero no puedo decidir cuál tiene más sentido. . .