haskell - 如何在高阶函数haskell中使用Maybe?
问题描述
我想解决以下 f 返回 Nothing 的问题,然后删除第一个元素。如果 f 返回 Just x,则第一个元素将更改为 x。我下面的答案适用于 Nothing 但我不明白如何区分 Nothing 和 Just 在函数内部
change:: (a -> Maybe a) -> [a] -> [a]
change f [] = []
change f (x:xs) = xs
改变(\x -> 无)[1..5] == [2..5]
change(\x -> 仅 10) [1,2,3] == [10,2,3]
解决方案
对于一个简单的解决方案,您可以像这样进行模式匹配(使用case
)f x
:
change:: (a -> Maybe a) -> [a] -> [a]
change _ [] = []
change f (x:xs) =
case f x of
Just x' -> x':xs
Nothing -> xs
那应该做你描述的
对于较短的,您可以使用maybeToList
并连接如下部分:
change:: (a -> Maybe a) -> [a] -> [a]
change _ [] = []
change f (x:xs) = (maybeToList $ f x) ++ xs
推荐阅读
- android - Android Marge 将两个 .wav 文件合并为一个文件
- python - 使用 python-opencv 进行背景子跟踪的质心跟踪
- selenium - 如何查询 VueJs /Vuetify 当前是否正在制作动画?
- javascript - 如何使用内部 html 在 UI 中显示位置数据响应,如果位置值为“”(空),我们需要将 Select 显示为输出
- android - 当android中的语言更改时,日期选择器的标题/标题不会改变
- java - 如何在Java中使用逗号后的位置迭代数字?
- macos - 未加载库:@rpath/libgfortran.4.dylib
- typescript - Cloud Firestore 中的日期和时间格式
- mysql - 在命令提示符下执行包时出现错误“SSIS 脚本任务已损坏”
- docker - 为已被 Docker 绑定的端口创建 SSH 隧道