Unter Berufung auf die Reihenfolge der Regeln
Um die Hamming-Distanz zwischen zwei Listen gleicher Länge zu berechnen, benutze ichfoldl(hamm, A, B, 0, R).
mit dieser Definition vonhamm/4
:
hamm(A, A, V, V) :- !.
hamm(A, B, V0, V1) :- A \= B, V1 is V0 + 1.
Der Cut in der ersten Regel verhindert das unnötige Backtracking. Die zweite Regel hätte jedoch anders geschrieben werden können:
hamm2(A, A, V, V) :- !.
hamm2(_, _, V0, V1) :- V1 is V0 + 1.
undhamm2/4
wird zusammen mit noch korrekt seinfoldl/5
oder für Abfragen, bei denen sowohl A als auch B gemahlen sind.
Gibt es also einen guten Grund, den einen dem anderen vorzuziehen? Oder gibt es einen Grund, die Regeln in dieser Reihenfolge beizubehalten oder zu vertauschen?
Ich weiß, dass die Abfrage
hamm(a, B, 0, 1).
ist falsch, während
hamm2(a, B, 0, 1).
ist wahr, aber ich kann mich nicht so recht entscheiden, welches sinnvoller ist. . .