gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:32:44 25 4
gpt4 key购买 nike

我想解决以下问题,其中 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]

改变(\x -> 仅 10) [1,2,3] == [10,2,3]

最佳答案

对于一个简单的解决方案,您可以像这样在 f x 上进行模式匹配(使用 case):

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 - 如何在高阶函数haskell中使用Maybe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67710566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com