0

次の問題を解決するためにあなたの助けが必要です:

3 人の女の子 (アン、スーザン、アリス) が、何色の靴とドレスを着るかを選択する必要があります。靴とドレスの色は、白、青、緑の 3 色があります。

主な条件:

  • アンは白が嫌いです。
  • スーザンは同じ色の靴とドレスを着ています。
  • アリスは白い靴を履いています。
  • アリスとアンの靴とドレスは色が違います。

私のコードは 2 つの条件のみを満たしています。私は、スーザンと同じ色の条件を満たしているのにちょっと苦労していますが、他の女の子は別の色の服を着る必要があります。

これが私が思いついたものです:

PREDICATES
   girl(symbol)
   shoes(symbol,symbol)
   skirt(symbol,symbol)
   hates(symbol,symbol)
   will_wear(symbol, symbol, symbol)


CLAUSES
   will_wear(X,Y,Z):-
      girl(X),
      shoes(X,Y),
      skirt(X,Z),
      not(hates(X,Y)),
      not(hates(X,Z)).

   girl(ann).
   girl(susan).
   girl(alice).

   hates(ann,white).

   skirt(_,white).
   skirt(_,blue).
   skirt(_,green).

   shoes(alice,white).
   shoes(_,blue).
   shoes(_,green).

GOAL
   will_wear(Name,Shoes,Dress).

上記のコードは問題なく動作しますが、解決策が多すぎます。さらに、スーザンが同じ色の靴とドレスを着用するという条件について、論理的な解決策を思いつきませんでした。

ありがとう。

4

2 に答える 2

1

私が条件を正しく理解していれば、それはシュラネが答えたものではありません。

これにより、女の子が同じ色のドレスと靴を履くようになります。

same_color(Girl) :-
    shoes(Girl, Color),
    dress(Girl, Color).

演習として別の色を残しておきますが、2つのことを言うことはあなたが言うことと同じではないことをほのめかしますA \= B。different_colorで苦労している場合は、コメントを残してください-そして、あなたが試したことを教えてください。

于 2011-10-06T17:58:18.960 に答える
1

頭のてっぺんから、次のようなことを考えています。

only_wears(Girl,Color):-
    shoes(Girl, Color),
    skirt(Girl, Color).

different_shoes(F, S):-
    shoes(F,F_color),
    shoes(S,S_color),
    not(equals(F_color,S_color)).

different_skirts(F, S):-
    skirt(F,F_color),
    skirt(S,S_color),
    not(equals(F_color,S_color)).

とは構造が同一であるためdifferent_shoes、句を他の句に渡す方法があるかどうか疑問に思います。different_skirts

次のように初期化します。

only_wears(ann, white).
different_shoes(alice, ann).
different_skirt(alice, ann).
于 2011-10-06T17:29:54.623 に答える