2012-05-03 8 views
0

、私が今持っていることは、基本的には各学生のためのマークが含まれていPrologの簡単なソート

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

です。

最高の3点を印刷したいと思います。

これを行うには、ソートする必要があると思います。ソートすると、生徒の名前の順序が失われます。

デフォルトで理解できるように、マークだけをソートし、マークに従ってソートすることもできます。

助けてください。コードスニペットが高く評価されました。

答えて

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

感謝を:) – HungryCoder