gpt4 book ai didi

haskell - 如何在 Haskell 中获得大数的数字总和?

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

我是一名 C++ 程序员,试图自学 Haskell,事实证明,掌握将函数用作一种循环的基础知识是一项挑战。我有一个很大的数字,50!,我需要添加它的数字之和。这是 C++ 中一个相对简单的循环,但我想学习如何在 Haskell 中进行。

我已经阅读了一些介绍性指南,并且能够获得 50 个!和

sum50fac.hs::

fac 0 = 1
fac n = n * fac (n-1)
x = fac 50
main = print x

不幸的是,此时我并不完全确定如何解决这个问题。
是否可以编写一个函数,将 (mod) x 10 添加到一个值,然后在 x/10 上再次调用相同的函数,直到 x/10 小于 10?如果那不可能,我应该如何解决这个问题?

谢谢!

最佳答案

sumd 0 = 0
sumd x = (x `mod` 10) + sumd (x `div` 10)

然后运行它:
ghci> sumd 2345
14

更新 1:

这个不生成 thunk 并使用 accumulator :
sumd2 0 acc = acc
sumd2 x acc = sumd2 (x `div` 10) (acc + (x `mod` 10))

测试:
ghci> sumd2 2345 0
14

更新 2:

pointfree 中的部分应用版本风格:
sumd2w = (flip sumd2) 0

测试:
ghci> sumd2w 2345
14

我用了 flip这里是因为函数由于某种原因(可能是由于 GHC 设计)不能使用累加器作为第一个参数。

关于haskell - 如何在 Haskell 中获得大数的数字总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838727/

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