şu var Sağlar ki:Haskell: Liste füzyonu, nerede ihtiyaç duyulur?
l = map f (map g [1..100])
Ve yapmak istediğimiz:
head l
Yani elde ederiz:
head (map f (map g [1..100]))
Şimdi, ilk elemanını almak zorunda bu. map
yüzden böyle bir şey tanımlanır:
f (head (map g [1..100]))
Ve sonra tekrar uygulanmıştır:
map f l = f (head l) : (map f (tail l))
Öyleyse olsun
f (g 1)
yok ara sonuçlanır
f (g (head [1..100]))
li sts sadece tembellik nedeniyle oluşur.
Bu analiz doğru mu? Ve böyle basit yapılarla:
foldl' ... $ map f1 $ map f2 $ createlist
hatta "liste füzyonu" olmadan, şimdiye kadar yaratılan ara listeleri nelerdir? (Bence tembellik onları önemsiz olarak ortadan kaldırmalı). Yaptığımız eğer bir listesini tutmak için bir sebep görebilirsiniz
tek yerdir: Biz başka bir yerde kullanılması halinde, l'
tutmak isteyebilirsiniz
l' = [1..100]
l = map f (map g l')
. Bununla birlikte, yukarıdaki l'
numaralı davada, derleyicinin, yukarıdaki listeyi depolamaktan ziyade yukarıdaki listeyi yeniden hesaplamak için daha hızlı gerçekleştirmesi oldukça önemsiz olmalıdır.