0

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

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

它基本上包含每个学生的分数。

我想打印最好的 3 分。

为此,我相信我必须进行排序。如果我进行排序,我将失去学生姓名的顺序。

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

请帮忙。代码片段赞赏。

4

1 回答 1

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]).
于 2012-05-03T17:33:56.770 回答