我想在Haskell的一个函数,给定的个位数的列表,我做完整号码。 我想在使用密集的列表和惠顾,因为它的代码如下:
funcion5 (x:xs) = [y*(10^w) | y <- (x:xs) w]
我们的想法是,要在列表中每个数字multiplie 10战俘的数目的位置。 最后,我只来总结所有的数字,我有,因为这数字:
sum (funcion5 (x:xs))
谁能帮帮我,好吗? 谢谢
我想在Haskell的一个函数,给定的个位数的列表,我做完整号码。 我想在使用密集的列表和惠顾,因为它的代码如下:
funcion5 (x:xs) = [y*(10^w) | y <- (x:xs) w]
我们的想法是,要在列表中每个数字multiplie 10战俘的数目的位置。 最后,我只来总结所有的数字,我有,因为这数字:
sum (funcion5 (x:xs))
谁能帮帮我,好吗? 谢谢
这可简单地通过与折叠来完成foldl1 :: Foldable t => (a -> a -> a) -> ta -> a
如下;
Prelude> foldl1 (\x y -> 10*x+y) [1,2,3]
123
您可以使用“折叠”的格局这一点。 因此,我们写这在以下方面foldl :: (a -> b -> a) -> a -> [b] -> a
:
function5 :: Num n => [n] -> n
function5 = foldl f 0
where f a x = ...
因此,这里f
采用两个参数a
(在迄今生成的数字),以及x
的下一个数字。
在一个位置表示法体系中,可通过“扫描”获得的值左到右和每次乘以基数的迄今获得的值,以及将所述下一个数字。 因此,这是你需要在“编码”的逻辑f
:以迄今获得的值,并且下一个数字,并产生下一个值。
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))