徳が高い ⇔ 低い

Haskellで徳が高いプログラムっていう表現をどこかで見たなーと思ってGoogleに聞いてみました。どうやらここのようです。
Diary
宣言的にプログラムを書くと徳が高いそうです。なるほど。
徳が高い例。

fact 0 = 1
fact n = n * fact (n - 1)

fact n = foldl (*) 1 [1..n]

fact n = foldr (*) 1 [1..n]

徳が低い例。

fact n
    | n < 2 = 1
    | otherwise = n * fact1 (n - 1)

fac n = if (n == 0)
            then 1
            else n * fact4 (n - 1)

fact n = case n of
              0 -> 1
              x -> x * fact5 (x - 1)