Pretty Printing列表清单

时间:2014-11-11 13:16:42

标签: haskell

我有一份清单清单:

[[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)?

2 个答案:

答案 0 :(得分:9)

而不是mapM_,您可以使用zipWithM_中的Control.Monad

g xss cs = zipWithM_ f cs xss

或者,如果您更改fg中的参数顺序以匹配,则可以使用较少的"点"

g = zipWithM_ f

此外,concat (intersperse " " ...)也称为unwords ...

答案 1 :(得分:3)

您可以使用zipuncurry

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