Потихоньку осваиваю этот язык, можете подсказать где лопата?
[krum@localhost haskell]$ cat test.hs
module Main where
import IO
fact :: Integer -> Integer -> Integer
fact a n = case n of
0 -> a
n | n < 0 -> 0
n -> fact (a * n) (n-1)
fac :: Integer -> Integer
fac 0 = 1
fac n | n > 0 = n * fac (n-1)
main :: IO ()
main = do
putStr "Enter a number: "
hFlush stdout
str <- getLine
let num = read str
resnum = fact 1 num
putStrLn $ "result: " ++ show resnum
[krum@localhost haskell]$ runhugs test.h
test.hi test.hs
[krum@localhost haskell]$ runhugs test.hs
Enter a number: 99999
result: runhugs: Error occurred
ERROR - Control stack overflow
Вроде как используется аккумулятор и, соответвенно, должна быть хвостовая рекурсия... Даже аналогичный код на C gcc с -03 смог оптимизировать хвостовой рекурсией.
Похожие темы
- Форум Я не понимаю хвостовую рекурсию в Haskell? (2007)
- Форум [haskell][Тормоза] (2012)
- Форум ocaml tail recursion (2006)
- Форум Recursive (2002)
- Форум HUGS и SegFault (2007)
- Форум Можно-ли полагаться на tail recursion в GCC? (2008)
- Форум Recursive validator (2015)
- Форум createrepo recursive (2022)
- Форум Recursive resolver (+) (2006)
- Форум bind: recursion (2006)