【问题标题】:Convert a list of digits to a number HASKELL将数字列表转换为数字 HASKELL
【发布时间】:2018-11-04 12:10:59
【问题描述】:

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

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

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

sum (funcion5 (x:xs))

有人可以帮帮我吗?谢谢

【问题讨论】:

标签: haskell ghci winghci


【解决方案1】:

这可以通过使用foldl1 :: Foldable t =&gt; (a -&gt; a -&gt; a) -&gt; t a -&gt; a 折叠来完成,如下所示;

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

【讨论】:

    【解决方案2】:

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

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

    所以这里f 有两个参数a(到目前为止生成的数字)和x 下一个数字。

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

    【讨论】:

      【解决方案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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多