Есть г..код на Haskell и Ruby который просто перебирает комбинации - «aa», «ab», «ac» ... «az», «ba» ... «zz». При строке «aaaaaa» код на Haskell справился за 15 минут а на Ruby за 3. Почему Haskell так тормозит? Или скорость проявляется только при компиляции(код запускался в ghci)?
import Data.Char (ord, chr)
mut :: String -> String
mut s
| ch == 'z' = mut (init s) ++ "a"
| otherwise = (init s) ++ [chr $ (+1) $ ord ch]
where ch = last s
test :: String -> String
test s
| s /= "zzzzzz" = test $ mut s
| otherwise = s
def mut s
if s[-1] == ?z then
s = mut(s[0,s.length-1]) + ?a
else
s[-1] = s[-1].succ
end
s
end
def test s
start = Time.now.to_i
while (s != "zzzzzz")
s = mut s
end
puts Time.now.to_i - start
end