У Haskell есть хвостовая рекурсивная оптимизация?
Я обнаружилвремя" Команда в Unix сегодня и думал, что яd использовать его для проверки разницы во времени выполнения между хвостово-рекурсивными и обычными рекурсивными функциями в Haskell.
Я написал следующие функции:
--tail recursive
fac :: (Integral a) => a -> a
fac x = fac' x 1 where
fac' 1 y = y
fac' x y = fac' (x-1) (x*y)
--normal recursive
facSlow :: (Integral a) => a -> a
facSlow 1 = 1
facSlow x = x * facSlow (x-1)
Они действительны, имея в виду, что они предназначены исключительно для использования с этим проектом, поэтому я нене нужно проверять наличие нулей или отрицательных чисел.
Однако, после написания основного метода для каждого, компиляции и запуска их с помощью "время" команда, оба имели одинаковое время выполнения снормальный рекурсивная функция, вытесняющая хвостовую рекурсивную. Это противоречит тому, что яd слышал о хвостовой рекурсивной оптимизации в lisp. Какие'причина этого?