gpt4 book ai didi

list - Haskell 中长度函数的问题

转载 作者:行者123 更新时间:2023-12-02 02:56:45 25 4
gpt4 key购买 nike

我正在尝试在Haskell中编写一个函数,该函数将获取整数列表,例如[1,2,3,4,5],并使用递归将它们转换为数字,例如12345。我使用 Haskell 标准库中的 length 函数来计算数字的位置,以便将它们全部加在一起(10000+2000+300+40+5)。但是,当我使用 length 来计算列表的长度时,无论如何它总是 1,我不知道为什么。这是我的代码:

dig :: [Integer] -> Integer
dig [] = 0
dig (x:xs) = x * (10^(fromIntegral(length[xs]))) + fromDigits(xs)

运行此代码始终只会将数字乘以 10,并且长度始终为 1,因此 dig [1,2,3,4] 给出 100 而不是 1234。

最佳答案

使用[xs],您将 xs 放入一个新的单元素列表中,因此长度为 1。

只需使用长度xs即可。

更简单的方法是将每个递归步骤的累积结果乘以 10:

dig :: [Integer] -> Integer
dig = foldl' (\a e -> 10 * a + e) 0

关于list - Haskell 中长度函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60943983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com