Prolog确定性 - 分组事实

时间:2012-05-25 20:19:06

标签: prolog deterministic

我有一个事实如此......

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

我需要知道是否有任何一组(性别,年龄),其中有一个最喜欢的水果(上述事实的答案将是(女性,年轻)。

我一直想弄清楚的是如何使用prolog中的aggregatefindall函数来返回某些类型的列表,如....

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

......就这样我可以检查每个成员的总数并测试它是否大于1。

非常感谢任何想法。

1 个答案:

答案 0 :(得分: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获得每个班级最喜欢的水果列表。