Haskell Language 階乘


階乘函數是Haskell“Hello World!” (通常用於函數式編程),它簡潔地演示了該語言的基本原理。

變化1

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

現場演示

  • Integral是整數類型的類。示例包括IntInteger
  • (Integral a) =>對所述類中的類型a施加約束
  • fac :: a -> a說, fac是需要一個功能a並返回a
  • product是一個函數,通過將它們相乘來累積列表中的所有數字。
  • [1..n]是特殊的符號,其desugars到enumFromTo 1 n ,並且是數的範圍1 ≤ x ≤ n

變化2

fac :: (Integral a) => a -> a
fac 0 = 1
fac n = n * fac (n - 1)

現場演示

此變體使用模式匹配將函數定義拆分為單獨的案例。如果參數為0 (有時稱為停止條件),則調用第一個定義,否則調用第二個定義(定義的順序很重要)。它還舉例說明了fac引用自身的遞歸。


值得注意的是,由於重寫規則,當使用GHC並激活優化時,兩個版本的fac將編譯為相同的機器代碼。因此,就效率而言,兩者是等價的。