Я просто изучаю Хаскелл, извините, если мой вопрос глуп. Я читаю learnyouahaskell.com, и теперь я нахожусь в главе 5 "Рекурсия". Вот пример реализации стандартной "обратной" функции:
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x]
Но кажется, что он работает в O (N ^ 2) времени, тогда как стандартный обратный ход выполняется в O (N) (надеюсь, так). Следующий код иллюстрирует это:
sum (reverse [1,2..1000000]) -- runs pretty fast
sum (reverse' [1,2..1000000]) -- never finishes
Итак, я начал думать, как быстрее реализовать свой собственный обратный ход. Это довольно легко сделать на императивных языках. Может быть, мне понадобится более продвинутый материал из последующих глав, чтобы сделать это? Любые подсказки приветствуются.