SORU
18 EYLÜL 2009, Cuma


Nasıl kat-sol kullanmak için zaman ve kat-doğru kullanmayı biliyor musunuz?

Bunun farkındayım kat sol üretir sol eğilimli ağaçları ve kat-sağ üretir sağ eğilerek ağaçlar, ama ne zaman ulaşmak için bir kat, ben bazen kendimi bulmak için gittikçe batağa saplanmış baş ağrısı yapan düşünce belirlemeye çalışan hangi kat uygun. Ben genellikle tüm sorun gevşemek ve benim sorunum için geçerli olarak kat işlevi uygulanması atlama.

Yani bilmek istediğim şey:

  • Kat için olup olmadığını belirlemek için bazı kurallar veya sola doğru katlayın nelerdir?
  • Ne kadar çabuk karşı karşıyayım sorun verilen kullanmak için hangi karar verebilirim?

Tek bir listeye öğe listeleri bir liste birleştirir bir fonksiyon dümdüz denilen yazmak için kat kullanarak Scala by Example bir örnek (PDF) var. Bu durumda, bir kat daha uygun bir seçimdir (listeleri sıralı bir şekilde göz önüne alındığında), ama bu sonuca varmak için biraz düşünmek zorunda kaldım.

Katlama (fonksiyonel) gibi ortak eylemde bir programlama olduğu için, bu çeşit kararların edebilmek için hızlı ve emin olmak istiyorum. Yani... herhangi bir ipucu?

CEVAP
18 EYLÜL 2009, Cuma


Telkin operatör gösterim (yazılı olarak) bir kat aktarabilirsiniz:

Bu örnek 6 ** akü işlevini kullanarak katlayın

fold x [A, B, C, D]

böylece a eşittir

A x B x C x D

Şimdi sadece operatör (parantez! koyarak) birleşme hakkında bir nedeni var.

Eğer varsasol ilişkilendirilebiliroperatör, bu gibi parantez ayarlayın

((A x B) x C) x D

Burada, bir kullanınkat sol. Örnek (haskell tarzı yarı)

foldl (-) [1, 2, 3] == (1 - 2) - 3 == 1 - 2 - 3 // - is left-associative

Eğer operatörü sağa ilişkilendirilebilir varsadoğru katlayın), parantez içinde bu şekilde ayarlanmış:

A x (B x (C x D))

Örnek: İnşaat-Operatör

foldr (:) [] [1, 2, 3] == 1 : (2 : (3 : [])) == 1 : 2 : 3 : [] == [1, 2, 3]

Genel olarak, aritmetik operatörler (en operatörleri) foldl daha yaygın yani sola ilişkilendirilebilir. Ama diğer durumlarda, telkin gösterimde parantez içinde oldukça yararlıdır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FND Films

    FND Films

    2 Mayıs 2006
  • jesiel santos

    jesiel santo

    15 Ocak 2009
  • pucksz

    pucksz

    24 Mart 2006