2014-10-10 50 views
0

有没有一种方法可以创建一个函数,包含不同模式的多个定义,包括在没有其他函数的语句模式匹配时执行的函数?Haskell函数模式'其他'

例如为:

someFunc (pattern1) = def1 
someFunc (pattern2) = def2 
someFunc (<otherwise/all other possible values>) = def3 

或者,如果这是不可能的,怎么能实现?

提前致谢!

此致敬礼, Skyfe。

回答

5

可以使用通配符匹配_

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 

为了澄清,模式都试过在你定义的顺序,所以上述功能相当于

isJust _ = False 
isJust (Just _) = True 

因为首先匹配_模式。什么编译器实际上做的是把这个变成一个case语句内部,所以第一个功能就相当于

isJust x = case x of 
    Just _ -> True 
    _  -> False 

当我们从一个曾经存在的所有其他编程语言都知道,case语句按顺序尝试。

+0

但是,如果两个定义都是可行的呢?它会自动使用符合输入值的第一个遇到的定义吗?因为在你的例子中,一个Just value作为参数会使第二个定义与通配符合适吗? – user2999349 2014-10-10 14:44:45

+0

模式按您定义的顺序进行尝试。因此'isJust _ = False';只是(Just _)= True'不会是相同的功能。 – bheklilr 2014-10-10 14:45:52

+0

好吧,我明白了,谢谢! – user2999349 2014-10-10 14:46:24