2012-05-03 1 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]). 

성적이 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