haskell - Can mapEvery be implemented with foldr -
for function maps function every nth element in list:
mapevery :: int -> (a -> a) -> [a] -> [a] mapevery n f = zipwith ($) (drop 1 . cycle . take n $ f : repeat id) is possible implement foldr ordinary map?
edit: in title, changed 'folder' 'foldr'. autocorrect...
here's 1 solution
mapevery :: int -> (a -> a) -> [a] -> [a] mapevery n f = foldr go (const []) 1 go m | m == n = f : 1 | otherwise = : (m+1) this uses "foldl foldr" trick pass state left right along list fold. essentially, if read type of foldr (a -> r -> r) -> r -> [a] -> r instantiate r int -> [a] passed integer current number of elements we've passed without calling function.
haskell functional-programming fold
No comments:
Post a Comment