list - 使用foldl,编写一个将整数列表转换为整数的函数?

标签 list haskell recursion foldleft

我正在尝试编写一个函数 dec2int将整数列表转换为整数。我唯一的限制是我必须使用 foldl .
该函数的类型签名是:

dec2int :: [Int] -> Int
该功能应该以这种方式工作:
Input:  dec2int [2,3,4,5]
Output: 2345
我在这里找到了一个我理解的有效解决方案:
dec2int' = foldl (\x y -> 10*x +y) 0
我尝试使用 foldl 编写自己的解决方案按要求:
dec2int xs = foldl (\a b -> a + (b*(10^(l-1)))) 0 xs
                  where l = length xs
但是,我收到此错误:
ghci> dec2int [1,1]
20
我意识到了length xs的值(value)必须是恒定的。但是,我希望该值因我的功能而异。
我想以这种方式工作
0 + 1*10^((length [1,1])-1) = 10 = v
10 + 1 *10^((length [1])-1) = 11
如何在递归过程中引用列表?我想要 length xs 的值每次都要换foldl被递归调用?

最佳答案

您可以在折叠的阶梯函数中跟踪索引:

dec2int xs = snd $ foldl (\(i, a) b -> (i + 1, a + b * 10 ^ (l - i))) (1, 0) xs
  where l = length xs
但是,正如 Willem van Onsem 所说,这比实际需要的要复杂得多。

关于list - 使用foldl,编写一个将整数列表转换为整数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68046228/

相关文章:

python - 任何想法如何提高从大字符串列表中选择元素的速度

c# - 使用 Linq 对字典进行分组

parsing - 为什么解析器组合器 "seq"是用 "bind"和 "return"定义的?

Haskell: (MonadPlus m => Bool -> a -> m a) 没有用吗?

Java && ||在 RETURN 语句中?

c - 使用递归扫描多个数字并计算扫描了多少个偶数(在c中)

python - 从单个列表python打印

python - 返回列表中重复元素并在列表中查找缺失元素的最快方法?

haskell - optparse-应用回溯

recursion - 递归可区分联合和映射