【发布时间】:2012-12-07 16:00:42
【问题描述】:
为了计算两个相同长度的列表之间的汉明距离,我使用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 一起使用或对于A 和B 都接地的查询仍然是正确的。
那么,是否有充分的理由偏爱一个而不是另一个?还是有理由保持规则的顺序或改变它们?
我知道查询
hamm(a, B, 0, 1).
是假的,而
hamm2(a, B, 0, 1).
是真的,但我不能完全确定哪一个更有意义。 . .
【问题讨论】:
标签: prolog meta-predicate