转换的数字列表的数量HASKELL(Convert a list of digits to a nu

2019-10-30 06:37发布

我想在Haskell的一个函数,给定的个位数的列表,我做完整号码。 我想在使用密集的列表和惠顾,因为它的代码如下:

funcion5 (x:xs) = [y*(10^w) | y <- (x:xs) w]

我们的想法是,要在列表中每个数字multiplie 10战俘的数目的位置。 最后,我只来总结所有的数字,我有,因为这数字:

sum (funcion5 (x:xs))

谁能帮帮我,好吗? 谢谢

Answer 1:

这可简单地通过与折叠来完成foldl1 :: Foldable t => (a -> a -> a) -> ta -> a如下;

Prelude> foldl1 (\x y -> 10*x+y) [1,2,3]
123


Answer 2:

您可以使用“折叠”的格局这一点。 因此,我们写这在以下方面foldl :: (a -> b -> a) -> a -> [b] -> a

function5 :: Num n => [n] -> n
function5 = foldl f 0
    where f a x = ...

因此,这里f采用两个参数a (在迄今生成的数字),以及x的下一个数字。

在一个位置表示法体系中,可通过“扫描”获得的值左到右和每次乘以基数的迄今获得的值,以及将所述下一个数字。 因此,这是你需要在“编码”的逻辑f :以迄今获得的值,并且下一个数字,并产生下一个值。



Answer 3:

multiplos_10 = [10^x | x <- [0..]]
aux (x:xs) = sum ([a*b | (a,b) <- zip (x:xs) multiplos_10])
a_numero (x:xs) = aux (reverse(x:xs))


文章来源: Convert a list of digits to a number HASKELL