用值替换空列表
Replacing empty lists with a value
我有一个函数 returns 这样的列表:
[ [1, 2, 3], [], [5], [5,6], []]
但是我想用 0 替换空列表,所以它看起来像这样
[ [1, 2, 3], [0], [5], [5,6], [0]]
到目前为止,我已经尝试了 filter
和 map
但收效甚微。有人可以给我指出正确的方向吗?
这里是有问题的代码:
knightPlace:: [Int] -> [[Int]]
knightPlace n = makeboard n
where
makeboard n = [x | i<-[0..(length n -1 )], x <- [checkPos i]]
-- checkPos add zero
checkPos i = [j+1 | j<-[0..(length n -1 )], queenFilter n i j]
-- filters all rows, cols and diags, also knights
queenFilter n i j = and [n!!(i) == 0 && n!!(k) /=(j+1) && (n!!(k)==0 || (abs(n!!(k)-(j+1))/=abs(i-k))) && (n!!(k)==0 ||not( ((abs(i-k)==2)&& (abs(n!!(k)-(j+1))==1)) ||((abs(i-k)==1)&& (abs(n!!(k)-(j+1))==2)))) | k<-[0..(length n - 1)] ]
被称为
knightPlace [0, 0, 6, 0, 0, 4, 0, 0]
考虑一下,如果你有一个函数 foo
可以将 []
转换为 [0]
并且 return 其他列表保持不变,map foo
是最终的你想要的功能。
用
改变你的功能
knightPlace n = map (\x -> if null x then [0] else x) $ makeboard n
也可以考虑使用 pointfree 风格
knightPlace = map (\x -> if null x then [0] else x) . makeboard
在l
,
中用ys
替换xs
replaceWith :: [a] -> [a] -> [[a]]
replaceWith xs ys l = map (\x -> if x == xs then ys else x) l
这里的例子,
replaceWith [] [0] [[1, 2, 3],[],[5],[5,6],[]]
我有一个函数 returns 这样的列表:
[ [1, 2, 3], [], [5], [5,6], []]
但是我想用 0 替换空列表,所以它看起来像这样
[ [1, 2, 3], [0], [5], [5,6], [0]]
到目前为止,我已经尝试了 filter
和 map
但收效甚微。有人可以给我指出正确的方向吗?
这里是有问题的代码:
knightPlace:: [Int] -> [[Int]]
knightPlace n = makeboard n
where
makeboard n = [x | i<-[0..(length n -1 )], x <- [checkPos i]]
-- checkPos add zero
checkPos i = [j+1 | j<-[0..(length n -1 )], queenFilter n i j]
-- filters all rows, cols and diags, also knights
queenFilter n i j = and [n!!(i) == 0 && n!!(k) /=(j+1) && (n!!(k)==0 || (abs(n!!(k)-(j+1))/=abs(i-k))) && (n!!(k)==0 ||not( ((abs(i-k)==2)&& (abs(n!!(k)-(j+1))==1)) ||((abs(i-k)==1)&& (abs(n!!(k)-(j+1))==2)))) | k<-[0..(length n - 1)] ]
被称为
knightPlace [0, 0, 6, 0, 0, 4, 0, 0]
考虑一下,如果你有一个函数 foo
可以将 []
转换为 [0]
并且 return 其他列表保持不变,map foo
是最终的你想要的功能。
用
改变你的功能knightPlace n = map (\x -> if null x then [0] else x) $ makeboard n
也可以考虑使用 pointfree 风格
knightPlace = map (\x -> if null x then [0] else x) . makeboard
在l
,
ys
替换xs
replaceWith :: [a] -> [a] -> [[a]]
replaceWith xs ys l = map (\x -> if x == xs then ys else x) l
这里的例子,
replaceWith [] [0] [[1, 2, 3],[],[5],[5,6],[]]