Math Haskell中的保护方程

Math Haskell中的保护方程,math,haskell,equations,Math,Haskell,Equations,有人能为我提供一个简单易懂的解释,说明哈斯克尔中使用的保护方程及其数学意义吗?哈斯克尔保护可以被视为一个在输入上分段定义的数学函数 foo x | x < 0 = bar | x < 5 = baz | x < 20 = quux | otherwise = quaffle foo x | x

有人能为我提供一个简单易懂的解释,说明哈斯克尔中使用的保护方程及其数学意义吗?

哈斯克尔保护可以被视为一个在输入上分段定义的数学函数

foo x | x < 0 = bar
      | x < 5 = baz
      | x < 20 = quux
      | otherwise = quaffle
foo x | x<0=bar
|x<5=baz
|x<20=qux
|否则=quaffle
将由数学家编写,如:

foo(x) = { bar, if x < 0
           baz, if x >= 0 && x < 5
           quux, if x >= 5 && x < 20
           quaffle, if x >= 20
foo(x)={bar,如果x<0
baz,如果x>=0&&x<5
如果x>=5&&x<20
quaffle,如果x>=20
Haskell函数中的每个卫兵都隐式地携带前面所有卫兵的否定,因为它们一个接一个地被尝试


Haskell选择在等号的左边写守卫,以便更容易遵循控制流。如果你选择将|读为“那样”,那么它就会变得相当直观。

守卫方程是一个Haskell等价的等式构造。

守卫方程是一个等式(关于等式的陈述)这涉及到所谓的案例区分。例如:

fac :: Integer -> Integer
fac n | n > 0     = n * fac (n - 1)
      | otherwise = 1
这是一个定义。数学家会写


根据定义,0!=1。对于所有大于0的值n,n!可以用(n-1)来定义!.这不是0的情况。这就是需要区分两种情况的原因。这就是防护方程所做的。

因此,它有点像是在一个条件下执行一个函数……根据条件,它将只在条件为真的情况下执行该函数,而之前的所有条件都为假?对吧?“quaffle”…这对我来说是新的一个:我把“|”读作“when”:
foox,when x<0,=bar…when x<5,=baz
等等。不过不要和
when
混淆。