2012-05-03 2 views
0

В Прологе, что у меня есть сейчас,Пролог простой сортировки

:-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

Смежные вопросы