Lambda hesabı fonksiyonel programlama dışında mı?


21

Ben bir üniversite öğrencisiyim ve şu anda Lambda Calculus üzerinde çalışıyoruz. Ancak, bunun neden benim için yararlı olduğunu anlamakta hala zorlanıyorum. İşlevsel programlamanın birçoğunu yaparsanız bunun yararlı olabileceğini anlıyorum, ancak fonksiyonel programlamayı öğrenmek için gerçekten gerekli olmadığını düşünüyorum, ne düşünüyorsunuz?

İkincisi, Lambda Calculus'un Bilgisayar Bilimi alanında ama işlevsel programlama dillerinin dışında bir kullanımı var mı?

Yanıtlar:


15

Lambda hesabı mantık, kategori teorisi, tip teorisi, biçimsel doğrulama, ... temel olarak programlama dili anlambilimi ve biçimsel mantık ile ilgili her şeydir. Öyle temel bir formalizm ki, bu alanlarda çalışan insanlar bunun yararını bile sorgulamıyorlar.

İşlevsel programlamayı anlamak için son derece yararlı olduğunu düşünüyorum çünkü size fonksiyonel programlamanın özünü veriyor. Fonksiyonlar, uygulama, ikame. Buna dayanarak, fonksiyonel programlar ve bunların dönüşümleri hakkında akıl yürütme becerilerinizi geliştirebilirsiniz. Üst düzey işlevler bir esinti.

Elbette lambda hesabı olmadan fonksiyonel programlamayı öğrenebilirsiniz, ancak onsuz fonksiyonel programlamayı asla gerçekten anlayamazsınız.


Cevabınız için çok teşekkür ederim Dave. Resmi doğrulamanın henüz en iyi neden olduğunu düşünüyorum, lambda hesabının öğrenmem için neden yararlı olduğunu ve yeterince tuhaf bir şekilde, gelecek dönem resmi doğrulama üzerine bir ders yapacağım. Ayrıca, herhangi bir dilde yazılmış bir yazılım parçasının, örneğin zorunlu veya nesne yönelimli bir yazılımın resmi doğrulamasını yapmak için lambda hesabı kullanır mısınız?
Jacob

1
Resmi doğrulama yaparken lambda hesabını doğrudan kullanamazsınız, ancak resmi doğrulamanın temellerinde görünecektir. Yazma özellikleri, zorunlu / OO kodu için bile işlevsel bir dilde yazmayı içerir.
Dave Clarke

Tamam, bu bir grup sayesinde ilginç, şimdi bunu incelemek için biraz daha nedenim var. Lambda hesabının işlevsel olmayan dilleri (daha düşük seviyelerde) tasarlamak için kullanılıp kullanılmadığını biliyor musunuz?
Jacob

1
ALGOL. Scala. Sonuçta, sorunuza cevap vermek zor. Lambda hesabı (çoğu) dil tasarımcıları için ortak bilginin bir parçası haline gelmiştir ve bu nedenle açıkça kullanılmasa bile dil tasarımını etkiler. Java'daki anonim sınıflar olan Smalltalk veya Ruby'deki blokları düşünün. Bunlar, lambda hesabındaki üst düzey işlevlerle yakından bağlantılı olan kapaklardır.
Dave Clarke

Tamam, çok teşekkürler Dave, bu çok takdir ediliyor.
Jacob

17

Bilgisayar bilimi ve mantığı dışında bir uygulama istiyorsunuz. Kolayca bulunan, örneğin cebirsel topolojide, kartezyen kapalı bir alan kategorisine sahip olmak uygundur , nLab üzerinde uygun topolojik uzay kategorisine bakın . Kartezyen kapalı kategorilere karşılık gelen biçimsel dil, tam olarak hesabıdır. Bunun nasıl işe yaradığını çok basit bir örnekle açıklayayım.λ

İlk olarak, bir ısınma egzersizi olarak, birinin size tanımlanan işlevinin olup olmadığını sorduğunu varsayalım farklıdır. Aslında bunun olduğunu kanıtlamak zorunda değilsiniz, sadece farklılaşabilir fonksiyonların bir bileşimi olduğunu gözlemliyorsunuz, bu nedenle farklılaşabilir. Başka bir deyişle, tanım biçimine göre kolay bir sonuç çıkardınız. f ( x ) = x 2 E x + log ( 1 + x 2 )f:RRf(x)=x2ex+log(1+x2)

Şimdi gerçek örnek için. Birinin size tanımlanan işlevinin olup olmadığını sorduğunu varsayalım süreklidir. -calculus kullanılarak ve sürekli , , vb. haritalar kullanılarak tanımlandığı için hemen "evet" yanıtı verebilir . f ( x ) = ( λ f : C ( R ' ) . X - X f ( 1 + T 2 ) d t ) ( λ y : R' . maks ( x , sin ( y + 3 ) ) λ max günahf:RR

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
λmaxsin

-culculus'un çeşitli uzantıları diğer alanlarda da aynı şeyi yapmayı mümkün kılar. Örneğin, düzgün bir topos kartezyen kapalı bir kategori olduğundan, türevlerden ve realitelerin halka yapısından başlayarak (ve isterseniz üstel fonksiyonu atayabilirsiniz) -calculus kullanılarak tanımlanan herhangi bir harita otomatik olarak pürüzsüz. (Aslında, pürüzsüz topoların ana itişi, "bir diski sonsuz ince ikizkenar üçgenlere böleriz" gibi şeyleri anlamlı bir şekilde söylemenize izin veren nilpotent sonsuz küçüklerin varlığıdır.)λλλ


1
Ayrıntılı yanıt verdiğiniz için teşekkür ederiz. Aslında bilgisayar bilimi içinde lambda hesabı için bir kullanım bulmaya çalışıyordum, ancak fonksiyonel programlama dışında, bu açık değilse özür dilerim. Soruyu daha açık bir şekilde belirtmek için değiştirdim.
Jacob

Ah, çok kötü, bu konuda ayrıntılı bir cevap yazardım.
Andrej Bauer

Bunun için özür dilerim. Herhangi bir ek bilgi eklemek isterseniz yorum eklemekten çekinmeyin :)
Jacob

2
Bence Dave'in sorusu iyi, ekleyecek bir şeyim yok. -calculus ile ne kadar heyecan verici şeyler yapabileceğinizi görmek istiyorsanız , belki de imkansız fonksiyonlara bir göz atabilirsiniz. Ama genel bir cevap olarak, Dave'in çok iyi. λ
Andrej Bauer

7

-calculus'a bakmanın bir yolu , parametre programlarının basit ve kısa bir modelidir. Kodu, işlevleri, yordamları veya yöntemleri olan hemen hemen her programlama dilinde ve modülleri olan veya türleri parametreleştirmenizi sağlayan herhangi bir dilde parametrelendirirsiniz. Parametreleme bir yeniden kullanım şeklidir. Çünkü -calculus kadar basit, Parametreleme koduna sağlayacak birçok programlama dilleri arasındaki ortak özellikler, özellikle açıkça ön plana çıkmaktadır.λλλ

-calculus hakkında bilgi sahibi olmadan çok iyi bir programcı olmak kesinlikle mümkündür , ancak son derece yararlı olan güzel bir şeyi kaçırıyorsunuz.λ


5

Microsoft LINQ (Dil Entegre Sorgulama) işlevsel programlama yeteneklerini yordamsal dillere aşılar. Bu kapsamlı ve oldukça doğrudan kullanır untangle bağımlılıkları ve veritabanı sunucusuna temsilci edilebilir ifade ağacının ayrı tutunuz bölümlerine -calculus. Bu, yüksek ticari değeri olan son derece pratik bir uygulamadır.λ

İşlevsel bir dil kullanarak küçük bir ticari uygulama yazdım ve akademisyenlere ve araştırmacılara değer vermesine rağmen ticari olarak prosedürel kuzenlerinden daha az kullanışlı olduklarını garanti edebilirim. Gerçekten bu kurslar için atlarla ilgili bir sorudur ve en pratik olanı, gerektiği gibi prosedürel veya işlevsel olabilen bir dildir. Sonuç olarak, LINQ desteğinde ( -expressions gibi) tanıtılan (C # 'a) işlevsel yetenekler , veritabanı sorguları bağlamı dışında oldukça fazla kullanılır.λ

Sonunda bulduğunuzda kendinizi bulabileceğiniz, sen ödenecek istiyorum çünkü iğrenç şeyleri yapmaya mecbur -calculus size neredeyse kesinlikle rağmen beklenenden daha yararlı olmaz işlevsel bir dil kullanıyor.λ


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.