如何在高阶函数haskell中使用Maybe?

我想解决以下问题,其中 f 不返回任何内容,然后删除第一个元素。如果 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 -> Just 10) [1,2,3] == [10,2,3]

回答

对于一个简单的解决方案,您可以像这样进行模式匹配(与casef 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


以上是如何在高阶函数haskell中使用Maybe?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>