GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let fac 0 = 1
Prelude> let fac n = product [1..n]
Prelude> fac 100000
Segmentation fault: 11
有人知道为什么会出现这种情况吗?
fac 10000
可以工作。
运行在 OS X 10.8.2 上。
嗯,从文件中加载:
fac :: Integer -> Integer
fac 0 = 1
fac n = product [1..n]
运行。
有趣的是,使用
fac :: Int -> Int
对于 fac 100000
返回 0
。我像 JohnL 一样期望出现错误。
这个网站 提到:
- 更具体地说,SegmentationFault 是一种类型不安全的语言拼写 DoesNotUnderstand 的方式。在像 Haskell 这样的类型安全的静态类型语言中,你不应该看到 segfaults。
这和 IO monad 有关吗?
fac 100000 :: Integer
在 os x 上得到一个 456574 位数。而fax 100000::Int
则是0 :: Int
,因为它有点粗略地说是 2^32(或 2^64)的倍数。 - applicativefac 100000
也不足以因为懒惰而导致堆栈溢出。 - Daniel Fischer