13

有人可以为我提供一个易于理解的对 Haskell 中使用的受保护方程及其数学意义的解释吗?

4

3 回答 3

12

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 选择在等号左侧写守卫,以便更容易遵循控制流。如果您选择阅读 | 作为“这样”,它变得相当直观。

于 2010-02-08T22:30:00.387 回答
9

受保护的方程是一个方程(关于等式的陈述),它涉及所谓的案例区分。一个例子是:

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

这是阶乘函数的定义。数学家会写,

乳胶

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

于 2010-02-08T22:34:20.010 回答
4

保护方程是分段函数的 Haskell 等效结构。

于 2010-02-08T22:30:18.037 回答