SORU
23 EYLÜL 2011, Cuma


Çalışan bir adam için combinators açıklaması

Bir kombinatorik nedir??

Oldu< . "serbest değişkenli fonksiyon ya da bir tanımı"BÖYLECE tanımlandığı gibi)?

Ya bu nasıl hakkında: tanınmış kağıt John Hughes Oklar, . göre >"kombinatorik program parçaları program parçaları inşa eden bir fonksiyonudur"çünkü avantajlı olan, "... programcı combinators kullanarak istenilen programın çok yapıları otomatik olarak, el ile her detayı yazmak yerine". map filter combinators iki yaygın örnekleridir söylüyor.

İlk tanımına uyan bazı combinators:

İkinci tanımına uyan bazı combinators:

  • göster
  • filtre
  • /(tahminen) azaltmak katlayın

Bana gerçek bir program ( eğer yanılıyorsam beni ikna ederseniz 1) yazmak için yardımcı olmaz bu ilk tanımı -- ilgilenmiyorum.Bana ikinci tanımını anlamak lütfen. Bana daha yüksek bir düzeyi daha az hata program için izin, daha kısa ve daha net kodu. harita, filtre ve azaltmak yararlı olduğunu düşünüyorum: Burada combinators hakkında özel sorularımdan:

  1. Harita, filtre gibi combinators daha fazla örnek nedir?
  2. Combinators programlama dilleri genellikle uygulamak ne?
  3. Nasıl combinators bana daha iyi bir API tasarlamanıza yardımcı olabilir?
  4. Ne kadar etkili combinators tasarım mı?
  5. Combinators işlevsel olmayan bir dil (Java), ya da bu dilleri combinators yerine ne kullanabilirim benzer?

Güncelleme

@C. A. McCann için teşekkürler, ben şimdi combinators biraz daha iyi bir anlayış var. Ama bir soru hala benim için bir düğüm noktası

Fonksiyonel bir program olan ve olmayan yazılı, combinators yoğun kullanımı yazılı arasındaki fark nedir?

Cevap kombinatorik-ağır versiyonu daha kısa, daha net, daha genel olduğunu sanıyorum, ama mümkünse derinlemesine bir tartışma daha, memnun olurum.

Ayrıca ortak programlama dilinde karmaşık combinators (yani daha karmaşık fold den) daha fazla örnek ve açıklamalar için arıyorum.

CEVAP
23 EYLÜL 2011, Cuma


Bana gerçek bir program ( eğer yanılıyorsam beni ikna ederseniz 1) yazmak için yardımcı olmaz bu ilk tanımı -- ilgilenmiyorum. Bana ikinci tanımını anlamak lütfen. Bana daha yüksek bir düzeyi daha az hata program için izin, daha kısa ve daha net kodu. harita, filtre ve azaltmak yararlı olduğunu düşünüyorum:

İki tanım aslında aynı şey. İlk resmi tanımı dayanmaktadır ve verdiğiniz örnekler vardırilkel combinators--en küçük yapı taşları mümkün. Sen, onlarla, daha sofistike combinators inşa edebilirsiniz gerçek bir program halinde yazmak için yardımcı olabilir. Varsayımsal bir makine dili olarak S ve K gibi combinators düşün "kombinatoriyel bilgisayar". Gerçek bilgisayar çalışmıyor bu şekilde, tabii ki, çok pratik olacak genelde üst düzey işlemlerle perde arkasında başka yollar, ancak kavramsal temeli hala yararlı bir araç için anlayışanlamüst düzey bu operasyonlarda.

Ver ikinci tanım daha samimi ve daha sofistike combinators kullanarak, çeşitli şekillerde diğer fonksiyonları birleştiren üst düzey fonksiyonları şeklindedir. Eğer temel yapı taşları ilkel combinators yukarıda, unutmayınher şeyionlardan yerleşik düzeni daha yüksek bir işlev ve kombinatorik gibi. Bir dil diğer temel öğeler var, ancak, bir ayrım arasında bir şeyler olan ya da olmayan fonksiyonları olan bir kombinatorik genellikle tanımlandığı gibi bir işlevi yönetir diğer işlevler, genel bir şekilde, yerine çalışma üzerinde herhangi bir işlev olmayan şeyler doğrudan.

Harita, filtre gibi combinators daha fazla örnek nedir?

Çok listelemek için çok fazla! İkisi de bütün bir toplama davranışı tanımlayan bir fonksiyon tek bir değer davranışını açıklayan bir işlev dönüşümü. Ayrıca, dönüştürme işlevleri vardırsadecediğer işlevler, onları baştan sona bir beste gibi, veya bölme ve yeniden argümanlar. Ya da koleksiyonları üretmek tüketmek özyinelemeli işlemler tek adımlı işlemleri açmak combinators olabilir. Ya da başka bir sürü şey, gerçekten.

Combinators programlama dilleri genellikle uygulamak ne?

Bu biraz değişebilir. Orada olduğunu görece az sayıda tamamen genel combinators çoğunlukla ilkel olanlar yukarıda belirtilen ... ... çoğu combinators olacak bazı bilinç herhangi bir veri yapıları kullanılan (eğer bu veri yapıları inşa diğer combinators zaten bu durumda, orada genellikle bir avuç "tamamen genel bir" combinators ve sonra ne olursa olsun çeşitli özel formları birileri karar sağlamak. (Uygun genelleştirilmiş sürüm) göster, kat durumlar saçma bir numarası vardır, ve açılmak isteyebilirsiniz hemen hemen her şeyi yapmak için yeterli.

Nasıl combinators bana daha iyi bir API tasarlamanıza yardımcı olabilir?

Tam olarak, düşük seviyeli ayrıntılar yerine üst düzey işlemleri ve bu etkileşim yolu açısından düşünerek söylediğiniz gibi.

"Her bir grup numaralandırma detayları. üzerinde soyut olduğu"koleksiyon üzerinde tarzı döngüler, popülerlik düşün Bunlar sadece göster/kat operasyonlarda çoğu zaman, ve yaparak bir kombinatorik (yerine yerleşik sözdizimi) yapabileceğiniz şeyler olarak varolan iki döngüler ve doğrudan onları birleştirmek birden fazla yol--yuva içinde bir diğeri, sonra bir diğeri, ve benzeri bu sadece uygulama bir kombinatorik ziyade hokkabazlık bir sürü kod.

Ne kadar etkili combinators tasarım mı?

İlk olarak, program ne olursa olsun, operasyonları mantıklı düşün. Bu işlemleri anlamlı jenerik şekillerde kombine edilebilir ne gibi işlemler birbirine bağlı ve tekrar küçük parçalara bölünebilir hakkında ne düşünüyorsun? Ana şeydönüşümlerveişlemleridoğrudan değileylemleri. Sadece donuk bir şekilde işlevselliği bazı karmaşık biraz işe yarar bir işlevi var ve sadece önceden sindirilmiş bir çeşit tükürür sonuç, yapabileceğiniz pek bir şey yok. Kod bu kesin sonuç bırakınkullanırbu combinators--noktasından sana Bir şeyler B, bir sürecin başında veya sonunda olması beklenen şey değil işaret etmek istiyorum.

Combinators işlevsel olmayan bir dil (Java), ya da bu dilleri combinators yerine ne kullanabilirim benzer?

Ahahahaha. Bunu sorman çok komik, çünkü nesneleri gerçekten üst düzey şeyin ilk yer ... bazı veriler, ama onlar da taşımak çevrede bir sürü işlemler ve oldukça çok, ne demek iyi OOP tasarım aşağı kaynar "nesneleri gerekir genellikle hareket gibi combinators, veri yapıları".

Bu yüzden muhtemelen en iyi cevap işte bu yerine kombinatorik-gibi şeyler, kullandıkları sınıfları ile çok sayıda alıcı ve ayarlayıcı yöntemleri ya da kamu alanları ve mantık çoğunlukla oluşur yapıyor bazı opak, önceden tanımlanmış bir eylem.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BSA

    BSA

    9 NİSAN 2012
  • Gan Eden Productions

    Gan Eden Pro

    11 HAZİRAN 2011
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009