SORU
19 Mayıs 2014, PAZARTESİ


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
19 Mayıs 2014, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★TheCrono Official Channel★

    ★TheCrono

    3 Mayıs 2014
  • Day9TV

    Day9TV

    22 NİSAN 2010
  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007