Neden Haskell's "hiçbir şey yapma" işlevi, kimlik, hafıza ton tüketir mi?
Haskell giriş değişmeden döndüren bir kimlik işlevi vardır. Tanımı basittir:
id :: a -> a
id x = x
Eğlence için, bu 8 çıktı:
f = id id id id id id id id id id id id id id id id id id id id id id id id id id id
main = print $ f 8
Birkaç saniye sonra (ve Görev Yöneticisi göre hafıza yaklaşık 2 gb), derleme ghc: out of memory ile başarısız olur. Benzer şekilde, yorumlayıcı ghci: out of memory diyor.
id oldukça basit bir fonksiyon olduğu için, çalışma zamanında bellek yük olmak veya derleme zamanı beklemiyorum. Tüm bellek için kullanılıyor mu?
CEVAP
Biz id, bilirim
id :: a -> a
Ve id id, Bu uzmanımsol*14 sureti türü vardır:
id :: (a -> a) -> (a -> a)
Ve sonra tekrar en soldaki için uzmanlık id id id id:
id :: ((a -> a) -> (a -> a)) -> ((a -> a) -> (a -> a))
id Her gördüğün ekleyin, yazın en soldaki id imza iki katı kadar büyük.
Bu tür sadece DZD bellek alacak derleme sırasında silinir unutmayın. Programda bellek olmayacak.

Haskell: yardımcı fonksiyon adı neden ...
Neden Haskell (bazen) olarak adlandırı...
Neden minimalist, örnek Haskell quicks...
Neden Haskell&; 7e7" "okumak için...
Neden bu Haskell kodu "sonsuz&quo...