将函数应用于列表中的列表

时间:2012-12-04 15:17:51

标签: haskell

我想要一个函数,在列表的每个列表中([[],[],[]])生成元素的总和,如果它甚至添加到该列表中的0和1,否则

我试过这个,但它只是对列表的头部正确,我不知道如何对其他人。

 func :: Matrix -> Matrix
 func (Matr size (x:xs))
                |sum(x) `mod` 2 == 0 = (Matr size ((0:x):xs))
                |otherwise = (Matr size ((1:x):xs))

我的尝试:

 [1,1,0,0]
 [1,0,0]
 [1,1,0]

我想要的是什么:

 [1,1,0,0]
 [1,1,0,0]
 [0,1,1,0]

感谢。

1 个答案:

答案 0 :(得分:6)

如果要对列表的所有元素应用相同的操作,请不要使用显式递归,让map为您执行此操作。

func :: Matrix -> Matrix
func (Matr size xs) = Matr size $ map prependParity xs
  where prependParity x
               | even $ sum x  = 0:x
               | otherwise     = 1:x