用基数位置数系统ř以这样的方式被构造,以使得一个数字一1一2 ...一个Ñ与一个我一个数字,具有值:
这意味着我们可以通过以下方式获取一系列数字的数字:
fromDigits :: (Num a, Foldable f) => a -> f a -> a fromDigits r = foldl (\a x -> r * a + x) 0
或者语法上更紧凑:
fromDigits :: (Num a, Foldable f) => a -> f a -> a fromDigits r = foldl ((+) . (r *)) 0
每次迭代,我们将累加器与基数相乘r
,然后我们将下一个数字加到它上面.因此,如果数字包含n个数字,则第一个数字将乘以基数r
n次.
例如,数字1425
对于不同的基数具有不同的值:
Prelude> fromDigits 6 [1,4,2,5] 377 Prelude> fromDigits 7 [1,4,2,5] 558 Prelude> fromDigits 8 [1,4,2,5] 789 Prelude> fromDigits 9 [1,4,2,5] 1076 Prelude> fromDigits 10 [1,4,2,5] 1425