2014-11-11 2 views
1

У меня есть список списков:Довольно список Печать списков

[[5,1,0,0,5,5,0,0],[0,0,1,4,2,0,6,1],[1,1,6,3,0,1,0,0],[1,5,0,0,0,1,1,6]] 

и строку "WXYZ"

Я хотел бы иметь: 1)

w: 5 1 0 0 5 5 0 0 
x: 0 0 1 4 2 0 6 1 
y: 1 1 6 3 0 1 0 0 
z: 1 5 0 0 0 1 1 6 

я написал :

f c xs = putStrLn (c : ':' : ' ' : concat (intersperse " " $ map show xs)) 

, чтобы написать одну строку

и 2)

g xxs c = mapM_ (f c) xxs 

Как я могу изменить 2) в цикле через строку "WXYZ" для того, чтобы: 1)?

ответ

3

Вы можете использовать zip и uncurry:

g xxs c = mapM_ (uncurry f) (zip xxs c) 
+0

Спасибо! Прекрасно работает! – user3166747

9

Вместо mapM_, вы можете использовать zipWithM_ из Control.Monad:

g xss cs = zipWithM_ f cs xss 

или, если изменить порядок аргументов в любом f или g для соответствия, вы можете сделать это с меньшими «точками»:

g = zipWithM_ f 

Также concat (intersperse " " ...) известен как unwords ....

+0

Спасибо! Прекрасно работает! – user3166747

Смежные вопросы