阶乘
阶乘函数是 HaskellHello World!
(通常用于函数式编程),它简洁地演示了该语言的基本原理。
变化 1
fac :: (Integral a) => a -> a
fac n = product [1..n]
Integral
是整数类型的类。例子包括Int
和Integer
。(Integral a) =>
对所述类中的a
类型施加约束fac::a -> a
说fac
是一个接受a
并返回a
的函数product
是一个函数,它通过将它们相乘来累积列表中的所有数字。[1..n]
是特殊的符号,它取决于enumFromTo 1 n
,是数字的范围。
变化 2
fac :: (Integral a) => a -> a
fac 0 = 1
fac n = n * fac (n - 1)
此变体使用模式匹配将函数定义拆分为单独的案例。如果参数是 0
(有时称为停止条件),则调用第一个定义,否则调用第二个定义(定义的顺序很重要)。它也举例说明递归,因为 fac
指的是它自己。
值得注意的是,由于重写规则,当使用 GHC 并激活优化时,两个版本的 fac
将编译为相同的机器代码。因此,就效率而言,两者是等价的。