0

我想在给定个位数列表的haskell中创建一个函数,我制作完整的数字。我正在考虑使用密集列表和顾客,如下代码:

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

这个想法是,遍历列表并将每个数字乘以 10 pow 到数字的位置。最后我只需要对所有数字求和,我的数字是这样的:

sum (funcion5 (x:xs))

任何人都可以帮助我吗?谢谢

4

3 回答 3

3

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

Prelude> foldl1 (\x y -> 10*x+y) [1,2,3]
123
于 2018-11-04T12:20:18.977 回答
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:取迄今为止获得的值和下一个数字,并产生下一个值。

于 2018-11-04T12:20:29.380 回答
2
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))
于 2018-11-04T12:36:04.340 回答