Prologで、私が今持っているのは、
:-dynamic listofPeople/2.
listofPeople(Mark,Name).
基本的に各生徒のマークが含まれています。
ベスト3のマークを印刷したい。
そのためには、ソートを行う必要があると思います。並べ替えをすると、生徒の名前の順番が崩れます。
デフォルトで理解できるように、私が望むのは、マークのみを並べ替え、名前もマークに従って並べ替えることです。
助けてください。コード スニペットを歓迎します。
キーと値のペアのリストを作成することから始めて、それを並べ替えて、上位 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]).