Haskell有尾遞歸優(yōu)化嗎?我今天在unix中發(fā)現(xiàn)了“time”命令,并認為我會用它來檢查Haskell中尾遞歸和正常遞歸函數(shù)之間運行時的差異。我寫了以下函數(shù):--tail recursivefac :: (Integral a) => a -> a
fac x = fac' x 1 where
fac' 1 y = y
fac' x y = fac' (x-1) (x*y) --normal recursivefacSlow :: (Integral a) => a -> a
facSlow 1 = 1facSlow x = x * facSlow (x-1)這些都是有效的,記住它們只是用于這個項目,所以我沒有費心去檢查零或負數(shù)。但是,在為每個編寫main方法,編譯它們并使用“time”命令運行它們時,兩者都具有相似的運行時,正常的遞歸函數(shù)使尾遞歸函數(shù)邊緣化。這與我在lisp中關(guān)于尾遞歸優(yōu)化的內(nèi)容相反。這是什么原因?
Haskell有尾遞歸優(yōu)化嗎?
慕俠2389804
2019-07-29 17:03:52