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

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • Trulia

    Trulia

    29 Kasım 2006