2012-05-03 115 views
0

在Prolog,我現在已經是,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]). 

如果您的分數少於三個,謂詞將失敗。

如果除了等級要具有名稱:

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