2015-09-25 2 views
0

С входными существами:Haskell: Добавление запятых при печати списка целых чисел

Моим код делает вывод:

abc 2 
am 1 2 
and 2 
do 2 
i 1 2 
like 2 
not 2 
spam 2 
what 1 

Где каждое слово в списке вместе с номером строки она появляется на.

Вопрос: Как напечатать заявление ниже, где вы получите запятые между номерами строк так:

abc 2 
am 1,2 
and 2 
do 2 
i 1,2 
like 2 
not 2 
spam 2 
what 1 

Вот код, у меня есть, что принимает список с кортежами, отформатированных как этот

[([1, 2], "a"), ([1], "b"), ([1], "c"), ([2], "dd")]

и выводит его в мой выходной ток, который я перечислил выше:

combineInts listTuple = map f $ groupBy ((==) `on` fst) $ sortBy (compare `on` fst) $ map swap listTuple 
    where f [email protected](x:_) = (map snd xs, fst x) 

printListTuples listTuple = unlines [ ys ++ " " ++ unwords (map show x) | (x, ys) <- listTuple ] 

Если я могу получить помощь, выясняя, как получить эти запятые между номерами строк, это было бы полезно и было бы более читаемым.

+2

- это код, который вы написали? –

ответ

2

Есть простой способ, и есть трудный путь. Простым способом является использование экземпляра Show для списков и пары действительно простых функций списка. Другой действительно простой способ - использовать только одну функцию списка. Cn вы видите, как? Чем сложнее, тем больше учебный способ - написать его самостоятельно. Можете ли вы придумать базу футляров и рекурсивный чехол?

+0

Ну, «show» используется в printListTuples, чтобы выполнить некоторые из того, что вы говорите мне (по крайней мере, я понимаю), но я не уверен, какую функцию использовать для вставки запятых. – sanic

+0

@ shamu11, я подумал о более приятном пути. Просто помните, что строки являются списками, и прочитайте документацию для Data.List в Hackage. Вы найдете то, что соответствует вашим потребностям. – dfeuer