Полагаясь на порядок правил

Чтобы рассчитать расстояние Хэмминга между двумя списками одинаковой длины, я используюfoldl(hamm, A, B, 0, R). с этим определениемhamm/4:

hamm(A, A, V, V) :- !.
hamm(A, B, V0, V1) :- A \= B, V1 is V0 + 1.

Разрез в первом правиле предотвращает ненужный возврат. Второе правило, однако, могло быть написано иначе:

hamm2(A, A, V, V) :- !.
hamm2(_, _, V0, V1) :- V1 is V0 + 1.

а такжеhamm2/4 все равно будет правильно вместе сfoldl/5 или для запросов, где и А, и Б заземлены.

Так есть ли действительно веская причина, чтобы предпочесть одно другому? Или есть причина держать правила в таком порядке или менять их?

Я знаю что запрос

hamm(a, B, 0, 1).

ложно, в то время как

hamm2(a, B, 0, 1).

это правда, но я не могу решить, какой из них имеет больше смысла. , ,

Ответы на вопрос(2)

Ваш ответ на вопрос