Я уже нашел this question и ответы на него.Haskell, Limit GHCI memory
На accepted answer вы можете увидеть мои комментарии о решении. Это не похоже на работу, например, для этой функции:
fiblist = 0 : 1 : (zipWith (+) fiblist (tail fiblist))
fib :: (Integral a) => a -> String
fib n
| n < 10000 = show (genericIndex fiblist n)
| otherwise = error "The number is too high and the calculation might freeze your machine."
Он по-прежнему делает систему бесполезной, даже если я только дать GHCI 256Mb Heap и 256Mb Stack пространство. Для простого вызова length
(из бесконечного списка) он действительно работает.
Мой вопрос сейчас: как выглядит решение для всех случаев? (Есть один Если нет, то почему нет?)
Edit # 1: Дополнительная информация
- ОС: Xubuntu 14.04
- Оперативная память: 4 Гб
- Точная команда, которую я использовал для GHCI:
stack ghci +RTS -M256m -K256m
GHC Версия:
stack ghc -v
результаты в:Version 1.0.2, Git revision fa09a980d8bb3df88b2a9193cd9bf84cc6c419b3 (3084 commits) x86_64 ... (a lot of other stuff) ...
Я не понимаю ваш пример. Я добавил импорт и загрузил его в 'ghci fib.hs + RTS -M256M -K256M'. Но самым большим вычислением, которое я могу сделать с 'fib', является' fib 9999', что можно сделать в гораздо меньшем, чем 256 МБ пространства. Можете ли вы привести пример, который на самом деле демонстрирует проблему? –
(И, если я делаю число 10000 больше, чтобы я мог попробовать 'fib 100000', я получаю сообщение об ошибке': Heap исчерпан, максимальный размер кучи 268435456 байт (256 МБ), используйте '+ RTS -M ', чтобы увеличить его .') –
Windows или Linux? Сколько у вас физической памяти? Каковы точные варианты предоставления GHCi? Какое точное выражение вы оцениваете? – MathematicalOrchid