kar*_*kfa 8
你只需要一个特殊的合并功能
> let merge [] ys = ys
| merge xs [] = xs
| merge (x:xs) (y:ys) = x : merge xs ys
或使用drop
> let merge2 x y = x ++ drop (length x) y
Wil*_*ess 5
你想要一种“ zipLongest
”,transpose
有点像这样:
maskMerge1 :: [b] -> [b] -> [b]
maskMerge1 as bs = map head $ transpose [as,bs]
-- or:
-- head <$> transpose [as,bs]
这是非常紧凑和优雅的(非常感谢@leftaroundabout的评论!)。
从上面看,
[ "abc" , [ ['a' ,'b' ,'c' ] ,
"1234" ] ['1' ,'2' ,'3' ,'4'] ]
---------- --------------------------
[ "a1","b2","c3","4" ] -- transpose
---------- --------------------------
"abc4" [ 'a' ,'b' ,'c' ,'4' ] -- map head
另一个答案中的代码length
也可以工作,即使是无限的,x
尽管调用了 dreaded length
,但由于调用了它,它会保留整个x
内存length
。
更多推荐
字符串,掩码,优雅,两个,方法
发布评论