I have a list like this that I am trying to sort:
[(tim,3),(tom,4),(jane,2),(mary,3)]
I want to rearrange it so it orders in descending numbers:
[(tom,4),(mary,3),(tim,3),(jane,2)]
I have a predicate that extract a list for a given number:
extractor([],[],[],_).
extractor([(Name, Number)|List], [(Name, Number)|NewList], Extracted, Number):-
extractor(List, NewList, Extracted, Number),
!.
extractor([A|List], NewList,[A|Extracted], Number):-
extractor(List, NewList, Extracted, Number).
So given a number it should give me a list of the elements with those numbers and have an extracted list without those elements.
Then I put that through the sort. Where I have a highest number, and it should loop through from 0 to that number, extracting any elements for that number. Until I have the sorted list.
numberSort([], _, 0).
numberSort(Unsorted, Sorted, HighestNumber):-
extractor(Unsorted, Sorted, ExtractedList, Counter),
numberSort(ExtractedList, Sorted, Counter),
HighestNumber is 1 + Counter.
numberSort(Unsorted, Sorted, HighestNumber):-
numberSort(Unsorted, Sorted, Counter),
HighestNumber is 1 + Counter.
However, when I try this it just goes through an infinite loop. Can someone help me out and show me where I am going wrong? Thanks,