gpt4 book ai didi

haskell - Haskell 的异常问题

转载 作者:行者123 更新时间:2023-12-02 02:48:38 26 4
gpt4 key购买 nike

我正在从终端运行 ghci。

在我的源文件中,我定义了

factorial :: Int -> Int
factorial n = product [1 .. n]

当我运行这个时,我得到了结果
factorial 13 = 1932053504

product [1 .. 13] = 6227020800

对于任何小于 13 的数字,结果都是正确的。但是,对于任何大于或等于 12 的数字,两者的结果不一致。

另外,如果我定义这个函数递归:
factorial' :: Int -> Int
factorial' 0 = 1
factorial' (n + 1) = (n + 1) * factorial' n

我仍然得到
factorial' 13 = 1932053504

如果您了解这里发生的事情,那将非常有帮助。谢谢

最佳答案

根据 Int 的文档:A fixed-precision integer type with at least the range [-2^29 .. 2^29-1] .您的 factorial输入函数以使用 Int ,这是溢出。现在,如果我们检查第二个答案的类型(在 GHCi 中简单地使用 product),我们会看到它的类型是 Integer :

Prelude> let a = product [1 .. 13]
Prelude> :t a
a :: Integer
Integer是无界的,因此能够容纳如此大的数字而不会溢出。

关于haskell - Haskell 的异常问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7088599/

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