Haskell 模式匹配:如何根据两个输入值确定要使用的模式

Haskell 模式匹配:如何根据两个输入值确定要使用的模式,haskell,functional-programming,pattern-matching,wildcard,Haskell,Functional Programming,Pattern Matching,Wildcard,好的,我正在学习Haskell的基础知识,最近我做了一个模拟考试,题中使用了模式匹配和通配符作为函数的一部分来生成不同的结果。创建的函数如下所示: fun x _ = 1 fun _ 0 = 2 fun x y = 3 现在的问题是添加fun0+fun10,两者显然都符合生成1的模式 然而,我看不出这是如何工作的,在我看来,任何输入值都可以使用其中的任何一种模式 我可能是看错了,有人能告诉我这个问题吗?为什么fun0和fun10都生成1?如果加在一起,结果当然是2 模式是按从上到下的顺序匹配的

好的,我正在学习Haskell的基础知识,最近我做了一个模拟考试,题中使用了模式匹配和通配符作为函数的一部分来生成不同的结果。创建的函数如下所示:

fun x _ = 1
fun _ 0 = 2
fun x y = 3
现在的问题是添加fun0+fun10,两者显然都符合生成1的模式

然而,我看不出这是如何工作的,在我看来,任何输入值都可以使用其中的任何一种模式


我可能是看错了,有人能告诉我这个问题吗?为什么fun0fun10都生成1?如果加在一起,结果当然是2

模式是按从上到下的顺序匹配的,因此
fun x
匹配任何东西。变量
x
被无条件地绑定到第一个参数,
\u
也被无条件地匹配而不绑定。由于第一个模式匹配,因此未尝试其他两个模式。

模式是按从上到下的顺序匹配的,因此
fun x
匹配任何内容。变量
x
被无条件地绑定到第一个参数,
\u
也被无条件地匹配而不绑定。由于第一个模式匹配,因此未尝试其他两个模式。

此外,如果启用
-Wall
@Lee Ahhh,编译器将告诉您这一点,这很有意义,谢谢。那么,我说的对吗?如果第一个模式被移除,剩下的只有最后两个模式,那么相同的问题fun00+fun10等于4?由于这两个输入都会生成顶部模式,即2?@Lee注意,如果您不使用右侧模式匹配中使用的变量,则可以将其替换为
fun x=1
相当于
fun=1
。此外,如果启用
-Wall
@Lee Ahhh,编译器将告诉您这一点,这非常有意义,谢谢。那么,我说的对吗?如果第一个模式被移除,剩下的只有最后两个模式,那么相同的问题fun00+fun10等于4?由于这两个输入都会生成顶部模式,即2?@Lee注意,如果您不使用右侧模式匹配中使用的变量,则可以将其替换为
funx=1
相当于
fun\uu1
。我很抱歉听到这样的咆哮,但我以前也有过这样的经历,人们总是无缘无故地投反对票。我觉得这个社区非常精英化,所以我觉得有必要保护我自己和我的声誉。我为那番咆哮感到抱歉,但我以前也有过这样的经历,人们无缘无故地投票反对。我觉得这个社区非常精英化,所以我觉得有必要保护我自己和我的声誉。