阶乘
阶乘函数是 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 将编译为相同的机器代码。因此,就效率而言,两者是等价的。