一百萬
突然想測試一下 Haskell 跑得有多快(或是有多慢),所以進 GHCi:
Prelude> [1..] !! 1000000 *** Exception: stack overflow啥?XD 為了確定不是 interpreter 太嫩,我用 ghc 編譯了我的第一份 native code:
main = putStr (show ([1..] !! 1000000))執行結果是
Stack space overflow: current size 8388608 bytes. Use `+RTS -Ksize' to increase it.所以還真的滿出來了!
(!!)
的正常定義應該是
(!!) : [a] -> Int -> a (x : xs) !! 0 = x (x : xs) !! (1 + n) = xs !! n看起來是 tail recursion 呀,為什麼會 stack overflow 勒?是
[1..]
的關係?
--
ghc -C
產出來的 C code 看不懂 XD。
Labels: Haskell
看到標題我還以為你解出RSA拿到一百萬美金的獎金咧
XD
可能是type inference得到的type是Integer,記憶體過大
幾個實驗如下
([1..]::[Integer])!!1000000
*** Exception: stack overflow
([1..]::[Int])!!1000000
1000001
-- 1e9 可能要花一兩分吧
([1..]::[Int])!!1000000000
1000000001
喔,看起來很合理!謝謝解惑 :)。
<< 回到主頁