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

我需要找出是否有任何一组(性别,年龄)有更多最喜欢的水果(上述事实的答案是(女性,年轻。)

我一直想弄清楚的是如何在序言中使用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 得到一个类列表(性别/年龄)。第二个 findall 获取每个班级最喜欢的水果列表。

于 2012-05-25T20:34:54.307 回答