Prolog简单排序

时间:2012-05-03 15:51:24

标签: sorting prolog structure

在Prolog中,我现在拥有的是,

:-dynamic listofPeople/2.
listofPeople(Mark,Name).

基本上包含每个学生的标记。

我想打印最好的3个标记。

要做到这一点,我相信我必须做排序。如果我进行排序,我将失去学生姓名的顺序。

默认情况下你可以理解,我想要的只是标记,并根据标记对名称进行排序。

请帮忙。代码片段表示赞赏。

1 个答案:

答案 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]).