я факт отрегулированы так ...Prolog определенность - группировка факты
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).
Я нужно выяснить, есть ли группа (пол, возраст), где есть еще один любимый фрукт (ответ на приведенные выше факты был бы (женский, молодой.)
То, что я пытался выяснить, - использовать функции aggregate
или findall
в прологе, чтобы вернуть список типов, например ....
female, young = 2 (apple, bannana)
male, young = 1 (apple)
male, old = 1 (bannana)
female, old = 1 (apple)
... Таким образом, я мог бы просто проверить общее количество для каждого члена и проверить, будет ли оно больше 1.
Любые идеи были бы весьма благодарны.
findall/3 + sort/2 -> setof/3 –
@Paulo Moura: Не совсем, setof терпит неудачу с пустым набором результатов, тогда как findall + sort не делает. – gusbro
Итак? Если вызов findall/3 выше успешно с пустым списком, sort/2 даст, конечно, также пустой список, а затем вызов члена/2 завершится неудачно, так как в пустом списке нет элементов. Поэтому вы можете заменить вышеперечисленные вызовы findall/3 + sort/2 вызовом setof/3. –