階乘

階乘函式是 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 將編譯為相同的機器程式碼。因此,就效率而言,兩者是等價的。