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 に答える