将数字列表转换为数字HASKELL

时间:2018-11-04 12:10:59

标签: haskell ghci winghci

我想在haskell中创建一个函数,给出给定的一位数字列表,然后输入完整的数字。我在考虑使用密集列表和顾客,如下所示:

  https://play.google.com/store/apps/details?id=ch.threema.app

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

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

有人可以帮助我吗?谢谢

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

您可以为此使用“折叠”模式。因此,我们用foldl :: (a -> b -> a) -> a -> [b] -> a来写:

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

因此,这里f接受两个参数a(到目前为止生成的数字),而x接受下一个数字。

positional notation system中,可以通过从左到右“扫描”并每次将到目前为止获得的值与基数相乘,再加上下一位来获得该值。因此,这就是您需要在f中进行“编码”的逻辑:获取到目前为止获得的值和下一个数字,并产生下一个值。

答案 2 :(得分: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))