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