У Haskell есть хвостовая рекурсивная оптимизация?

Я обнаружил команду «time» в unix сегодня и подумал, что буду использовать ее для проверки разницы во времени выполнения между хвостовой и обычной рекурсивной функциями в 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)

Они действительны, имея в виду, что они предназначены исключительно для использования с этим проектом, поэтому я не стал проверять наличие нулей или отрицательных чисел.

Однако после написания основного метода для каждого, компиляции и запуска их с помощью команды «time», оба имели одинаковое время выполнения собычный рекурсивная функция, вытесняющая хвостовую рекурсивную. Это противоречит тому, что я слышал о хвостовой рекурсивной оптимизации в lisp. В чем причина этого?

Ответы на вопрос(4)

Ваш ответ на вопрос