use*_*349 0 haskell function pattern-matching
有没有办法可以为不同的模式创建一个具有多个定义的函数,包括在没有其他函数的语句模式匹配时执行的函数?
例如:
someFunc (pattern1) = def1
someFunc (pattern2) = def2
someFunc (<otherwise/all other possible values>) = def3
Run Code Online (Sandbox Code Playgroud)
或者,如果这不可能,它怎么能实现?
提前致谢!
最好的问候,Skyfe.
您可以使用通配符匹配_:
isJust :: Maybe a -> Bool
-- Here we don't care about what's inside the `Just`
isJust (Just _) = True
-- Here we don't care what it is, it's not a `Just` so return `False`
isJust _ = False
Run Code Online (Sandbox Code Playgroud)
为了澄清,模式按照您定义它们的顺序进行尝试,因此上述函数不等同于
isJust _ = False
isJust (Just _) = True
Run Code Online (Sandbox Code Playgroud)
因为_模式首先匹配.编译器实际上正在做的是在内部将其转换为case语句,因此第一个函数将等效于
isJust x = case x of
Just _ -> True
_ -> False
Run Code Online (Sandbox Code Playgroud)
正如我们从其他所有编程语言中所知道的那样,依次尝试案例陈述.