我正在努力将这三个规则连接在一起

时间:2016-01-15 12:06:14

标签: prolog prolog-toplevel

我在将以下三条规则连接在一起时遇到了问题。

countingCombo([H|T], Sequence2) :-
   fact1(H, Sequence),
   append(Sequence, Sequence2, Sequence3),
   countingCombo(T, Sequence3).
countingCombo([], Combination) :-
   print(Combination),
   membersofCombo(Combination, X, C).

membersofCombo(List, X, C) :-
   sort(List, List1),
   member(X, List1),
   count(List, X, C).

count([], X, 0).
count([X|T], X, Y) :-
   count(T, X, Z),
   Y is 1+Z.
count([X1|T], X, Z) :-
   X1 \= X,
   count(T, X, Z).

countingcombo创建一个附加列表。 membersofcombo,对列表进行排序,然后生成原始附加列表的每个成员,计数规则然后计算每个成员的出现次数。

membersofcombo和count一起工作,但我无法让countcombo连接到组合成员。

1 个答案:

答案 0 :(得分:2)

您的代码存在许多问题:

  • 您是否知道combination 不是变量(代表某些列表)?

    rule1([], combination) :-
       print(combination),
       rule2(combination, X, C).
    

  • 选择更好的谓词名称:rule1rule2rule3不要告诉我任何事情......

  • count/3的实施中使用

  • 消除条款X中的单例变量count([], X, 0). 很可能,您打算写count([], _, 0).

  • 提供count/3的实施。是rule3/3吗?