这是一个我无法解决的简单问题 我试图通过以下代码获得maybe_divide作为所需的分配,但终端给我一个错误消息
test2.hs:1:112:模式中的解析错误:(只是x)
maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = case maybeX maybeY of
(Just x) (Just y)
|x/=0 && y/=0 -> Just (div x y)
|x=0 && y/=0 -> Just 0
|x/=0 && y=0 -> Nothing
Nothing (Just y) -> Nothing
(Just x) Nothing -> Nothing
谁愿意告诉我它有什么问题? 感谢
答案 0 :(得分:4)
maybeX maybeY
在参数maybeX
上应用函数maybeY
,而您打算对(maybeX,maybeY)
对进行大小写分析。您还应该使用==
表示相等,而不是=
。以下将按您的意图执行:
maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = case (maybeX,maybeY) of
(Just x,Just y)
|x/=0 && y/=0 -> Just (div x y)
|x==0 && y/=0 -> Just 0
|x/=0 && y==0 -> Nothing
(Nothing,Just y) -> Nothing
(Just x,Nothing) -> Nothing
或者,您可以使用Maybe
monad,如
maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = do
x <- maybeX
y <- maybeY
case (x,y) of
(0,y) -> Just 0
(x,0) -> Nothing
(x,y) -> Just (div x y)