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