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)
我究竟做错了什么?
您可以使用工作器包装器方法来执行此操作:
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)