如何在子句中使用列表名称?

时间:2014-04-09 19:37:28

标签: prolog

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).

1 个答案:

答案 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之后进行切割以强制确定性(并使谓词半确定性)。