Aşağıdaki kodlarım var. 1000000 argümanı ile çalıştırmak için 1s maliyeti, ancak myEven standart even işleviyle değiştirilecekse 5s maliyeti. Kodu kontrol ettim, standart bile fonksiyonu * myEven * ile aynı işlevi görür.Haskell'in 'bile' işlevi neden programımı yavaşlatıyor?
import Data.Word
import Data.List
import System.Environment
collatzNext :: Word32 -> Word32
collatzNext a = (if myEven a then a else 3*a+1) `div` 2
myEven :: (Integral a) => a -> Bool
myEven a = (a `rem` 2) == 0
collatzLen :: Word32 -> Int
collatzLen a0 = length $ takeWhile (/= 1) $ iterate collatzNext a0
main = do
[a0] <- getArgs
let max_a0 = (read a0)::Word32
print $ maximum $ map (\a0 -> (collatzLen a0, a0)) [1..max_a0]
sadece emin olmak için - [info-page] 'i (https://stackoverflow.com/tags/haskell/info) okuyun ve programı -O2' seçeneği ile derlediniz mi? – epsilonhalbe
@epsilonhalbe: Bu 7.10'da bir derleyici (iyi, kütüphane) regresyonu. Bununla birlikte, 8.0'de düzeltildi: https://ghc.haskell.org/trac/ghc/ticket/11701 – Zeta