整数到单个整数的列表 - Haskell

cam*_*mps 1 recursion haskell list pattern-matching

我似乎正在努力解决 Haskell 中应该非常简单的事情,但我无法弄清楚,我需要一些帮助。我正在尝试转换整数列表 ([3,2,1]) 并将其转换为单个整数 (321)。

这是我到目前为止所拥有的:

fromDigits :: [Integer] -> Integer
fromDigits [] = 0;
fromDigits (x:xs) = x : fromDigits (xs)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Sib*_*ibi 5

您可以使用工作器包装器方法来执行此操作:

fromDigits :: [Integer] -> Integer
fromDigits xs = aux xs 0
    where aux [] acc = acc
          aux (x:xs) acc  = aux xs ((acc * 10) + x)
Run Code Online (Sandbox Code Playgroud)

演示:

?> fromDigits [3,2,1]
321
Run Code Online (Sandbox Code Playgroud)

或者甚至你可以使用高阶函数foldl

?> foldl' (\acc x -> (acc * 10) + x) 0 [1,2,3]
123
Run Code Online (Sandbox Code Playgroud)