2

私はそのように設定された事実を持っています...

fav_fruit(male, young, apple).
fav_fruit(female, young, bannana).
fav_fruit(male, old, bannana).
fav_fruit(female, old, apple).
fav_fruit(female, young, apple).

好きな果物が 1 つ以上ある (性別、年齢) のグループがあるかどうかを調べる必要があります (上記の事実に対する答えは (女性、若い) になります)。

私が理解しようとしてきたのは、プロローグでaggregateorfindall関数を使用して、.... のようなある種のリストを返す方法です。

female, young = 2 (apple, bannana)
male, young = 1 (apple)
male, old = 1 (bannana)
female, old = 1 (apple)

...そうすれば、各メンバーの合計を確認して、それが 1 より大きいかどうかをテストできます。

どんなアイデアでも大歓迎です。

4

1 に答える 1

2

どうですか

fav_fruit_class(Gender-Age, List):-
  findall(Gender-Age, fav_fruit(Gender, Age, _), LGenderAge),
  sort(LGenderAge, SGenderAge),
  member(Gender-Age, SGenderAge),
  findall(Fruit, fav_fruit(Gender, Age, Fruit), List).

最初の findall+sort は、クラス (性別/年齢) のリストを取得します。2 番目の findall は、クラスごとに好きな果物のリストを取得します。

于 2012-05-25T20:34:54.307 に答える