Haskell'i öğreniyorum ve this tutorial'dan gelen temel faktör fonksiyonuyla ilgili sorun yaşıyorum.Haskell temel faktörleri çıkmıyor mu?
Temelde, gibi bir çarpınımını tanımladığınız:
Prelude> let factorial 0 = 1
Prelude> let factorial n = n * factorial (n - 1)
tip kontrol eder: mantıklı
Prelude> :t factorial
factorial :: Num a => a -> a
. Ancak, bu işlevin davranışı yoktur. Giriş ne olursa olsun (interactive): out of memory
sonucunu verir.
Prelude> factorial 5
(interactive): out of memory
ben bu hafıza hatası dışında olmasına yol açan sonsuz özyinelemeli çağrı olduğunu varsaymak var, ama muhtemelen buna neden olabilir emin değilim. Aynı şey açıkça bu 1 olarak ilan ettik rağmen factorial 0
ile gerçekleşir:
Prelude> factorial 0
(interactive): out of memory
Şimdi burada garip bir parçası: Bir dosyada faktöryel fonksiyonunu tanımlarsanız, iyi çalışıyor. Geri GHCi gidip :l tesths.hs
çalıştırırsanız ben hatasız factorial 5
yürütebileceği, Sonra dosya tesths.hs
s.t .:
factorial 0 = 1
factorial n = n * factorial (n - 1)
oluşturun.
Neler oluyor burda?
Huh. Mantıklı, sanırım. Bu garip davranış olsa da. – Zyerah
Oldu. "Hadi ..." diye ekledi. Bu kesinlikle ghci hakkında biraz garip olan bir şey değildir - bir sonucun 'a => a', 'a => IO a' ya da 'IO()' türüne göre değişir. – ScootyPuff
Bu biraz mantıklı. Neredeyse her dilde gerekli olan girdinin türüne bağlıdır. – Zyerah