在 Prolog 中,我现在拥有的是,
:-dynamic listofPeople/2.
listofPeople(Mark,Name).
它基本上包含每个学生的分数。
我想打印最好的 3 分。
为此,我相信我必须进行排序。如果我进行排序,我将失去学生姓名的顺序。
默认情况下,您可以理解,我想要的只是对标记进行排序,并根据标记对名称进行排序。
请帮忙。代码片段赞赏。
您可以从创建键值对列表开始,对其进行排序并打印前 3 个等级。
go(G1,G2,G3) :- findall(Grade-Name, listofPeople(Grade,Name), List),
keysort(List, [G1-_,G2-_,G3-_|SortedList]).
如果您的成绩少于三个,则谓词失败。
如果除了成绩之外,您还想拥有姓名:
go(N1-G1,N2-G2,N3-G3) :- findall(Grade-Name, listofPeople(Grade,Name), List),
keysort(List, [G1-N1,G2-N2,G3-N3|SortedList]).