並べ替えようとしている次のようなリストがあります。
[(tim,3),(tom,4),(jane,2),(mary,3)]
降順になるように並べ替えたい:
[(tom,4),(mary,3),(tim,3),(jane,2)]
特定の番号のリストを抽出する述語があります。
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).
したがって、番号を指定すると、それらの番号を持つ要素のリストが表示され、それらの要素を含まない抽出されたリストが得られます。
それから私はそれを並べ替えました。最大の数値があり、0 からその数値までループして、その数値の要素を抽出する必要があります。ソートされたリストができるまで。
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.
ただし、これを試してみると、無限ループを通過します。誰かが私を助けて、どこが間違っているのか教えてもらえますか? ありがとう、