我想要一个在列表列表上更改(1 到 0)的函数,当该行/列中 1 的数量不均匀时。我已经完成了这些功能:
1)查看列表中的行是否偶数:
parityLine :: [[Int]] -> [Bool]
parityLine [] =[]
parityLine (x:xs)
|sum(x) `mod` 2 == 0 = True:(parityLine(xs))
|otherwise = False:(parityLine(xs))
2) 对列表列表中的相应元素求和:
sumPositions :: [[Int]] -> [Int]
sumPositions [] = []
sumPositions (x:xs) = foldl (zipWith (+)) (repeat 0) (x:xs)
3)查看列表中的列是否偶数:
parityColumn :: [Int] -> [Bool]
parityColumn [] = []
parityColumn (x:xs)
|head(x:xs) `mod` 2 == 0 = True:parityColumn(xs)
|otherwise = False:parityColumn(xs)
4)是否操作或使用两个布尔列表:
bol :: [Bool] -> [Bool] -> [[Bool]]
bol [] _ = []
bol (x:xs) (y:ys)= (map (||x) (y:ys)):(bol xs (y:ys))
5) 正确列表:
correct :: [[Int]] -> [[Bool]]
correct [] = []
correct (x:xs)=(bol(parityLine (x:xs))(parityColumn(sumPositions(x:xs))))
所以我想要的是将函数更改correct
为 [[Int]]->[[Int]] 执行此操作:
My Int list(x:xs) With my correct function applied
[[0,0,1,1], [[True,True,True,True],
[1,0,1,1], [True,True,False,True],
[0,1,0,1], [True,True,True,True]
[1,1,1,1]] [True,True,True,True]]
现在我可以在第二行第三列中看到,False,所以我必须更正那个数字 1 以使多个 1 是偶数。如果该列表中有多个 False,我只想更正这些 1 中的一个。
结果,我希望该函数correct
返回:
[[0,0,1,1],
[1,0,0,1],
[0,1,0,1],
[1,1,1,1]]
谢谢。