Sorting Prolog简单排序

Sorting Prolog简单排序,sorting,prolog,structure,Sorting,Prolog,Structure,在序言中,我现在看到的是 :-dynamic listofPeople/2. listofPeople(Mark,Name). 基本上包含了每个学生的分数 我想打印最好的3个标记 要做到这一点,我相信我必须进行分类。如果我进行排序,我将丢失学生姓名的顺序 默认情况下,您可以理解,我只希望对标记进行排序,并根据标记对名称进行排序 请帮忙。代码片段很受欢迎。您可以从创建键值对列表开始,对其排序并打印前3个等级 go(G1,G2,G3) :- findall(Grade-Name, listofPe

在序言中,我现在看到的是

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