0

我想要一个函数,它在列表的每个列表([[],[],[]])中生成元素的总和,如果它甚至添加到该列表中,则为 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]

谢谢。

4

1 回答 1

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
于 2012-12-04T15:24:02.393 回答