如何在Haskell中使用自定义ConcatListsOnFunc实现myMap函数
实现说明
首先你提供的ConcatListsOnFunc存在两处笔误,修正后可正常运行:
ConcatListsOnFunc :: (a -> [b]) -> [a] -> [b] ConcatListsOnFunc func [] = [] -- 原第二行函数名多写了后缀f ConcatListsOnFunc func (y:ys) = func y ++ ConcatListsOnFunc func ys -- 原递归调用的flattenMap就是本函数的别名
这个函数的逻辑和Haskell标准库中的concatMap完全一致,完全可以用来实现你需要的myMap。
具体实现
你只需要通过lambda表达式,把myMap入参的单值返回函数,包装成返回单元素列表的函数,传入ConcatListsOnFunc即可:
myMap :: (a -> b) -> [a] -> [b] myMap f = ConcatListsOnFunc (\x -> [f x])
效果验证
调用myMap (+1) [1,2,3]时,执行逻辑如下:
- 每个元素依次传入lambda,得到
[2]、[3]、[4]三个单元素列表 ConcatListsOnFunc将三个列表拼接,最终输出[2,3,4],完全符合要求。
内容的提问来源于stack exchange,提问作者program.exe
相关产品推荐
相关产品推荐

