SORU
15 NİSAN 2011, Cuma


Ne "avantaj ve dezavantajları ücretsiz" fonksiyonel programlama stili noktası?

Bazı dillerde (Haskell?) biliyorum müjdelenen noktası-serbest stil elde etmek için, ya da hiçbir zaman açıkça başvurmak adıyla bağımsız çalışabilmesi. Bu bana master için çok zor bir kavramdır, ama beni avantajları ya da dezavantajları) bu tarzın ne olduğunu anlamak için yardımcı olabilir. Kim açıklayabilir?

CEVAP
15 NİSAN 2011, Cuma


Nokta-serbest stil olarak bazı yazar tarafından kabul edilirultimatefonksiyonel programlama tarzı. Şeyler özetle, 0* *türünde bir fonksiyon türü için başka bir öğe t2 yazın bir öğe t1 bir dönüşümü açıklar. Fikri "" fonksiyonlar (açık değişkenleri kullanılarak yazılmış) vurgulamak . pointful olduğunu ^em>elemanları"nokta-ücretsiz" fonksiyonlar (değişkenleri kullanma olmadan ifade) kaydetti . yazarken (\x -> ... x ..., öğe 4**) neler olduğunu tarif ediyorsun süre ^em>dönüşümkendisi, basit bir kompozisyon olarak dönüştürür. Nokta-serbest stil savunucusu dönüşümler gerçekten de merkezi bir kavram olması ve kullanımı kolay olsa pointful gösterimde, bu asil ideal bizi oyalar savunuyorlar.

Nokta-ücretsiz fonksiyonel programlama çok uzun bir süre için mevcut olmuştur. Bu zaten bilinen mantıkçı olan eğitimi combinatory logic beri yeni ufuklar açan bir çalışma Musa Schönfinkel 1924 yılında, ve temel için ilk çalışmaya ne olacağını ML yazın çıkarım Robert Feys ve... Haskell Curry 1950'lerde.

Fikir oluşturmak için fonksiyonları bir ifade kümesinin temel combinators çok çekici ve uygulanan çeşitli etki alanları gibi bir dizi işleme dilleri türetilmiş APL veya çözümleyici kombinatorik kütüphane gibi Haskell'ın Parsec. Nokta-ücretsiz programlama önemli bir savunucusu John Backus. 1978 konuşmasında "Programlama Von Neumann Tarzı Kurtulmuş Olabilir mi ?", şöyle yazdı:

Lambda ifadesi (ikame kurallar) yeteneğine sahiptir tanımlama olası tüm işlevleri türleri tüm olası hesaplanabilir ve bağımsız değişken herhangi bir sayı. Bu özgürlük ve güç vardır dezavantajları gibi belirgin avantajları. Benzerlik göstermektedir geleneksel olarak sınırsız kontrol deyimleri gücünü sınırsız özgürlük kaos getirir. diller: Bir sürekli durumda uygun bir şekilde birleştirerek yeni bir form olarak icat bir lambda calculus, bir aşina değil birkaç birleştirerek formları tarzı ya da yararlı özellikleri olan bütün amaçlar için yeterli. Sadece yapısal programlama olarak kaçınan çok daha basit olan programlar elde etmek için, kontrol ifadeleri daha iyi özellikleri yapısı ve üniforma yöntemleri anlayışlı davranışları, fonksiyonel programlama kaçınan yani lambda ifade, yerine koyma, ve çoklu işlev türleri. Böylece programlar aşina inşa sağlar bilinen faydalı özellikleri ile işlevsel formları. Bu programlar bu yüzden onların davranış genellikle anlaşılabilir yapılandırılmış ve cebirsel teknikleri benzer mekanik tarafından kanıtlanmış lise Cebir problemleri çözümünde kullanılan.

İşte hepsi bu kadar. Nokta-ücretsiz programlama avantajı yapılandırılmış kombinatorik bir stil şehirlerinde equational akıl doğal bir güç vardır. Equational muhakeme olmuştur özellikle reklamı tarafından savunucularından "Squiggol" hareketi (bkz: [1] [2]) ve gerçekten kullanmak adil bir paylaşım noktası-ücretsiz combinators ve hesaplama/yeniden yazma/muhakeme kuralları.

Son olarak, nokta-ücretsiz haskellites arasında programlama popülerlik için bir neden 14 ** ilişkisi. Kategori teorisi, morfizmaları olarak görülebilir ("nesneler arasındaki dönüşümler") çalışma ve hesaplama temel nesne. Süre kısmi sonuçlar verir akıl belirli kategoriler için yapılan bir pointful tarzı, ortak bir yol inşa etmek, incelemek ve işlemek oklar hala nokta-serbest stil ve diğer sözdizimi gibi dize diyagramları da sergi bu "pointfreeness". İnsanlar "programlama Cebir" programlama kategoriler yöntemleri ve kullanıcılar (örneğin kağıt [2]/muz yazarları hardcore categorists). savunmak arasındaki sıkı bağlantıları çok var

Haskell wiki Pointfree page ilginizi çekebilir.

Pointfree tarzı dezavantajı oldukça açıktır: okumak için gerçek bir ağrı olabilir. Biz hala değişkenler, gölgelendirme çok sayıda korkunçluğuna rağmen kullanmayı seviyorum sebebi, alfa-denklik vb., okumak için çok doğal bir gösterimde olduğunu ve düşün. Genel bir fikir, bir karmaşık fonksiyon (şeffaf bir başvuru dili) gibi karmaşık bir tesisat sistemi: giriş parametreleri, bazı borular, uygulanan iç fonksiyonları, çoğaltılamaz (\x -> (x,x)) ya da unutulmuş (\x -> (), boru önde gelen bir yere), vb. Ve değişken nottur güzel örtülü hakkında tüm makine: verdiğin bir isim girdi ve isimlerini çıktıları (veya yardımcı hesaplamaları), ama gerek yok tarif tüm tesisat planı, küçük borular olacak gitmemesi için bir engel için daha büyük olanlar, vb. \(f,x,y) -> ((x,y), f x y) gibi bir şey olarak kısa, su miktarı inanılmaz. Her değişken ayrı ayrı izleyin, ya da her Ara düğüm tesisat okuyabilirsiniz, ama asla tüm makine birlikte göreceğiz. Nokta-serbest stil kullandığınızda, tüm açık, her şeyi yaz, sonra bakmak gerekir, ve bazen sadece düz çirkin.

PS: bu tesisat yakından görme muhtemelen en pointful programlama dilleri (zor) kullanılan programlama dilleri, yığın ile ilgilidir. Onlara bazı programlama yapmaya çalışıyorum sadece mantık programlama öneriyoruz gibi bir his almanızı tavsiye ederim. Factor, Cat saygıdeğer bkz: 18**.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007
  • SuppressedStorm

    SuppressedSt

    11 AĞUSTOS 2013
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011