問題は、最後の要素を見つけることです。よく動く整数型。Int 型でオーバーフローしますが、Int64 を試すと、ガベージ コレクターが動作しなくなったようです。
module Main (main) where
import Data.Int
import System.Environment
getNum :: Int -> Int64
merge [] s2 = s2
merge s1 [] = s1
merge (s1:s1s) (s2:s2s)
| s1 < s2 = s1 : (merge s1s (s2:s2s))
| s1 > s2 = s2 : (merge (s1:s1s) s2s)
| otherwise = s1 : (merge s1s s2s)
scaleStreams scale = map $ (*) scale
getNum n = s_3_56!!n
where s_3_56 = 1:(merge (scaleStreams 2 s_3_56)
(merge (scaleStreams 3 s_3_56)
(scaleStreams 5 s_3_56 )))
main = do
snum:_ <- getArgs
putStrLn $ show $ getNum (read snum)
アップデート。Data.Int のインポートに失敗しました。そして100,000,000の要素が必要です。Int64 を使用すると、応答が停止するか、プロセッサの使用が停止します。
必要のない要素をクリーンアップできるように、ghcのキーが必要なのかもしれません。
これらはすべてベンチマークに関するものなので、整数よりも明確なものが必要です。