2010-12-17 4 views
2

저는 수은에서 완전히 초보자이며이 문제를 해결하기가 어렵습니다. 나는 작은 목록에서 높은 목록으로 정렬 된 목록으로 목록을 변환하고 싶다. 예 :수은 속의 튜플 목록으로 변환

string.to_char_list("this is a test") becomes 

[{'a', 1}, {'e', 1}, {'h', 1}, {'i', 2}, {' ', 3}, {'s', 3}, {'t', 3}] 

OR 

[3,2,1,2,1,1,2] becomes 

[{3, 1}, {1, 3}, {2, 3}] 

튜플 목록이 모두 작음에서 높은 빈도로 정렬 된 것을 볼 수 있습니다.

내가 누군가에게 나를 도와 줄 수 있는지 묻는 중이거나 튜토리얼을 가리키는 포인터가있어 팁을 찾을 수 있습니다.

답장을 보내 주셔서 감사합니다.

+0

? 숙제 문제입니까? (그렇다면 대답은 좀 늦을 수도 있습니다 ....;) –

답변

4

표준 라이브러리에는 예를 들어 모든 도구를 사용할 수있는 가방 데이터 유형이 있습니다. 기본적으로 목록을 가방으로 변환 한 다음 가방을 빈도가있는 목록으로 다시 변환합니다. 그런 다음 목록 정렬을 사용하여 원하는대로 정렬 할 수 있습니다. 또는 수작업으로 동일한 작업을 수행하고 누락 된 요소를 발생 횟수와 함께 저장하는 축약 형 맵을 사용하여 목록을 접을 수 있습니다.

가방과 함께 예 : 당신은이 문제를 해결하기 위해 지금까지 노력했다 무엇

:- module freq. 
:- interface. 
:- import_module io. 
:- pred main(io::di, io::uo) is det. 

:- implementation. 
:- import_module string. 
:- import_module list. 
:- import_module assoc_list. 
:- import_module bag. 

main(!IO) :- 
    List = string.to_char_list("this is a test"), 
    bag.from_list(List, Bag), 
    bag.to_assoc_list(Bag, ElemSortedAssocList), 
    list.sort(assoc_list.reverse_members(ElemSortedAssocList), CountSortedAssocList), 
    assoc_list.reverse_members(CountSortedAssocList, Result), 
    io.write(Result, !IO), 
    io.nl(!IO). 
관련 문제