taglist([classique, baroque, jazz, blues, country, rock, pop]).
distance(Tag1, Tag2, D) :-
pos(Tag1, **taglist**, A),
pos(Tag2, **taglist**, B),
D is abs(A-B).
答案 0 :(得分:1)
我不认为pos/3
存在于SWI-Prolog中,但nth0/3
与您解释的内容类似,但参数位置除外。以下代码可以解决这个问题:
taglist([classique, baroque, jazz, blues, country, rock, pop]).
distance(Tag1, Tag2, D):-
taglist(L),
nth0(A, L, Tag1),
nth0(B, L, Tag2),
D is abs(A - B).
L
的成员是否都是唯一的,你可以在第二个nth0/3
之后进行切割以强制确定性(并使谓词半确定性)。