阶乘

阶乘函数是 HaskellHello World! (通常用于函数式编程),它简洁地演示了该语言的基本原理。

变化 1

fac :: (Integral a) => a -> a
fac n = product [1..n]

现场演示

  • Integral 是整数类型的类。例子包括 IntInteger
  • (Integral a) => 对所述类中的 a 类型施加约束
  • fac::a -> afac 是一个接受 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 将编译为相同的机器代码。因此,就效率而言,两者是等价的。