Edw*_*ETT 10
Haskell守卫可被视为在输入上分段定义的数学函数.
foo x | x < 0 = bar
| x < 5 = baz
| x < 20 = quux
| otherwise = quaffle
Run Code Online (Sandbox Code Playgroud)
将由数学家编写,如:
foo(x) = { bar, if x < 0
baz, if x >= 0 && x < 5
quux, if x >= 5 && x < 20
quaffle, if x >= 20
Run Code Online (Sandbox Code Playgroud)
Haskell函数中的每个守卫都隐含地对其前面的所有守卫进行否定,因为它们是一个接一个地尝试的.
Haskell选择在等号左侧写保护,以便更容易遵循控制流程.如果您选择阅读| 就像'那样'然后它变得相当直观.
守卫等式是一个等式(关于等式的陈述),涉及所谓的案例区分.一个例子是:
fac :: Integer -> Integer
fac n | n > 0 = n * fac (n - 1)
| otherwise = 1
Run Code Online (Sandbox Code Playgroud)
这是阶乘函数的定义.数学家会写,
0!根据定义,= 1.对于所有值ň大于0,N!可以用(n - 1)来定义!.这不是0的情况!.这就是需要区分两种情况的原因.这就是守卫等式所做的事情.