Haskell函数模式'否则'

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.

bhe*_*ilr 6

您可以使用通配符匹配_:

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)

正如我们从其他所有编程语言中所知道的那样,依次尝试案例陈述.