我有一份清单清单:
[[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)?
答案 0 :(得分:9)
而不是mapM_
,您可以使用zipWithM_
中的Control.Monad
:
g xss cs = zipWithM_ f cs xss
或者,如果您更改f
或g
中的参数顺序以匹配,则可以使用较少的"点"
g = zipWithM_ f
此外,concat (intersperse " " ...)
也称为unwords ...
。
答案 1 :(得分:3)
您可以使用zip
和uncurry
:
g xxs c = mapM_ (uncurry f) (zip xxs c)