Как распечатать все возможные оценки рекурсивным или другим способом? - PullRequest
0 голосов
/ 03 июня 2018

Хорошо, я реализовал предикат show(Name,Grade)., который работает следующим образом

?-show(Name,8).
Name=Jim;
Name=Ann;
false
?-show('Jim',Grade).
Grade=8;
false

Я хочу построить предикат worstGrades(Name,Grade), который найдет худшего ученика в классе, который каким-то образом реализует show(Name,Grade) и нажав; возвращает второго худшего ученика, затем третьего и т. Д., Как этот

?-worstGrades(Name,Grade).
Name=Bob,Grade=3;
Name=Max,Grade=5;
Name=Pete,Grade=5; 
....

Я думаю, что решение связано с рекурсивным доступом к show(Name,Grade) с переменной Grades в диапазоне (0,10), но я не могу придумать способ сделать это в настоящее время. Любая помощь?

1 Ответ

0 голосов
/ 03 июня 2018

Вы можете использовать что-то вроде:

show('Jim',8).
show('Anne',8).
show('bob',6).
show('fred',7).


worst_grades(Name,Grade):-
    setof(Grade-Name,show(Name,Grade),Grades),
    member(Grade-Name,Grades). 

Запрос:

?-worst_grades(Name,Grade).
Grade = 6,
Name = bob;
Grade = 7,
Name = fred;
Grade = 8,
Name = 'Anne';
Grade = 8,
Name = 'Jim'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...