在Prolog中,我现在拥有的是,
:-dynamic listofPeople/2.
listofPeople(Mark,Name).
基本上包含每个学生的标记。
我想打印最好的3个标记。
要做到这一点,我相信我必须做排序。如果我进行排序,我将失去学生姓名的顺序。
默认情况下你可以理解,我想要的只是标记,并根据标记对名称进行排序。
请帮忙。代码片段表示赞赏。
答案 0 :(得分:1)
您可以先创建一个键值对列表,对其进行排序并打印前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]).