我想在给定个位数列表的haskell中创建一个函数,我制作完整的数字。我正在考虑使用密集列表和顾客,如下代码:
funcion5 (x:xs) = [y*(10^w) | y <- (x:xs) w]
这个想法是,遍历列表并将每个数字乘以 10 pow 到数字的位置。最后我只需要对所有数字求和,我的数字是这样的:
sum (funcion5 (x:xs))
任何人都可以帮助我吗?谢谢
这可以简单地通过折叠来完成,foldl1 :: Foldable t => (a -> a -> a) -> t a -> 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))