1

我现在拥有的是,

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

例如

     19, 'Jos'
     92, 'Abdul'
     33, 'Izz'
     16, 'Xin'

我想要这样-

92, 'Abdul'
33, 'Izz'
19, 'Jos'

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

我想打印最好的 3 分。

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

正如您默认情况下可以理解的那样,我想要的是仅对标记进行排序并根据标记更改名称位置,所以当我打印时

我得到上面的输出

代码片段赞赏。

4

2 回答 2

1

我已经在下面的帖子中回答了你:

go(N1-G1,N2-G2,N3-G3) :- findall(Grade-Name, listofPeople(Grade,Name), List), 
                         keysort(List, [G1-N1,G2-N2,G3-N3|SortedList]).

在您的输入go(X,Y,Z)结果中X = 'Abdul'-92, Y = 'Izz'-33, Z ='Jos'-19

于 2012-05-03T18:00:55.407 回答
0

您不能在打印之前按标记对列表进行排序,取前 3 个,然后按名称排序吗?

于 2012-05-03T16:40:45.847 回答