0

次の 3 つのルールを一緒に接続する際に問題が発生しています。

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

countcombo は追加リストを作成します。membersofcombo は、そのリストを並べ替えてから、元の追加リストの各メンバーを生成します。count ルールは、各メンバーの出現回数をカウントします。

membersofcombo と count は連携して動作しますが、countingcombo をコンボのメンバーに接続することはできません。

4

1 に答える 1

2

コードにはいくつかの問題があります。

  • combinationが変数ではないことを知っていますか (いくつかのリストを表しています)。

    rule1([],組み合わせ) :-
       プリント(組み合わせ)、
       rule2(組み合わせ、X、C)
     

  • より適切な述語名を選択してください: rule1rule2、そしてrule3何も言わないでください...

  • !の実装でを使用します。count/3

  • X句内のシングルトン変数を削除しcount([], X, 0).
    ますおそらく、あなたは書くつもりでしたcount([], _, 0).

  • の実装を提供しますcount/3。ですかrule3/3

于 2016-01-15T12:54:23.520 に答える