Um die Hamming-Distanz zwischen zwei Listen der gleichen Länge zu berechnen, verwende ich foldl(hamm, A, B, 0, R).
mit dieser Definition von hamm/4
:auf die Reihenfolge der Regeln Unter Berufung
hamm(A, A, V, V) :- !.
hamm(A, B, V0, V1) :- A \= B, V1 is V0 + 1.
Der Schnitt in der ersten Regel verhindert die unnötigen Rückzieher. Die zweite Regel, jedoch wurde anders geschrieben haben könnte:
hamm2(A, A, V, V) :- !.
hamm2(_, _, V0, V1) :- V1 is V0 + 1.
und hamm2/4
werden noch richtig sein, zusammen mit foldl/5
oder für Abfragen in denen sowohl A als auch B sind geschliffen.
So ist es ein wirklich guter Grund, die einen über den anderen zu bevorzugen? Oder gibt es einen Grund, die Regeln in dieser Reihenfolge zu halten oder umzuschalten?
Ich weiß, dass die Abfrage
hamm(a, B, 0, 1).
falsch ist, während
hamm2(a, B, 0, 1).
wahr ist, aber ich kann nicht ganz entscheiden, welche mehr Sinn macht. . .
Man könnte argumentieren, für 'hamm2 (a, B, 0, 1)' ja, ist B nicht die wie A, also sollten diese beiden Elemente zur Hamming-Distanz beitragen ... aber wie gesagt, ich kann auch nicht ganz entscheiden, wann das Sinn machen würde. –