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

成績が 3 未満の場合、述語は失敗します。

成績に加えて名前を付けたい場合:

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