Haskell中的守卫方程

时间:2010-02-08 22:03:32

标签: math haskell equations

有人能为我提供一个易于理解的保护等式的解释,因为它在Haskell中使用,还有它的数学意义吗?

3 个答案:

答案 0 :(得分:10)

Haskell守卫可被视为在输入上分段定义的数学函数。

foo x | x < 0 = bar
      | x < 5 = baz
      | x < 20 = quux
      | otherwise = quaffle

将由数学家编写,如:

foo(x) = { bar, if x < 0
           baz, if x >= 0 && x < 5
           quux, if x >= 5 && x < 20
           quaffle, if x >= 20

Haskell函数中的每个守卫都隐含地对其前面的所有守卫进行否定,因为它们是一个接一个地尝试的。

Haskell选择在等号左侧写保护,以便更容易遵循控制流程。如果您选择阅读|就像'那样'然后变得相当直观。

答案 1 :(得分:8)

守卫等式是一个等式(关于等式的陈述),涉及所谓的案例区分。一个例子是:

fac :: Integer -> Integer
fac n | n > 0     = n * fac (n - 1)
      | otherwise = 1

这是factorial function的定义。数学家会写,

Latex

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

答案 2 :(得分:4)

守卫等式是piecewise function的Haskell等价结构。