SORU
21 Aralık 2008, Pazar


Foldr vs foldl etkileri (veya foldl')

ÖncelikleReal World Haskellokuyorum , hiç foldl' yerine foldl kullanma diyor. Sana güveniyorum.

Ama foldl' vs foldr kullanma konusunda kararsızım. Farklı çalışma yapısı önüme koydu görebiliyorum ama ne zaman anlayamayacak kadar aptal değilim "hangisi daha iyi." Gerçekten onlar aynı cevabı üretmek olarak kullanılan (değil mi?) önemli olmamalı gibi geliyor bana sanırım. Aslında, bu yapı ile benim önceki deneyim Ruby inject ve Clojure "" ve "sağ" sürümleri. sol yok gibi reduce. (Yan soru: hangi sürümü kullanıyorlar mı?)

Benim gibi zeka Özürlü bir tür yardım edebilecek herhangi bir fikir çok takdir olurdu!

CEVAP
21 Aralık 2008, Pazar


ys = [y1,y2,...,yk] gibi görünüyor foldr f x ys özyineleme

f y1 (f y2 (... (f yk x) ...))

foldl f x ys özyineleme ise benziyor

f (... (f (f x y1) y2) ...) yk

Önemli bir şey varsa f x y değeri hesaplanan x değeri, sadece üzerinde kullanarak da foldr' listenin tamamını incelemek gerekir. olmamasıdır Örneğin

foldr (&&) False (repeat False)

döner False oysa

foldl (&&) False (repeat False)

asla sona erer. (Not: repeat False her öğe*.* 22) bulunduğu sonsuz bir liste.

, foldl' diğer yandan kuyruk özyinelemeli ve sıkı. Bilmek zorundasın traverse bütün listeyi ne olursa olsun (örneğin, toplam sayıları bir liste) foldl' Daha fazla alan- (ve muhtemelen zaman) daha verimli foldr.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • makemebad35

    makemebad35

    17 NİSAN 2006
  • mist64

    mist64

    30 Mayıs 2006
  • The Weavers of Eternity Paracord Tutorials

    The Weavers

    1 Ocak 2014