ScholarGate
Asistan

Fonksiyonel Programlama

Fonksiyonel programlama, hesaplamayı matematiksel fonksiyonların değerlendirilmesi olarak ele alan, değişebilir durumdan kaçınan ve üst düzey fonksiyonları, değişmezliği ve denklemsel akıl yürütmeyi vurgulayan bir yaklaşımdır.

PaperMind ile konu bulYakındaMakale ve konu bul
Tools & resources
Slaytları indir
Learn & explore
VideoYakında

Tanım

Fonksiyonel programlama, programların değişmez veriler üzerinde saf fonksiyonlar birleştirilerek inşa edildiği, böylece bir ifadenin değerlendirilmesinin yalnızca girdilerine bağlı olduğu ve gözlemlenebilir yan etki üretmediği bir paradigmadır.

Kapsam

Bu konu, lambda kalkülüsüne dayanan fonksiyonel paradigmayı kapsamaktadır: birinci sınıf ve üst düzey fonksiyonlar, değişmezlik ve referans şeffaflığı, özyineleme, tembel değerlendirme, cebirsel veri tipleri ve örüntü eşleştirme ile etkileri yapılandırmak için monadların ve diğer soyutlamaların kullanımı. Saf fonksiyonların birleştirme, akıl yürütme ve paralelleştirmeye neden yardımcı olduğunu ele almaktadır.

Temel sorular

  • Üst düzey fonksiyonlar ve tembel değerlendirme modülerliği nasıl iyileştirir?
  • Referans şeffaflığı, akıl yürütme ve optimizasyon açısından ne gibi faydalar sağlar?
  • Yan etkiler, tamamen fonksiyonel bir ortamda nasıl modellenir?
  • Fonksiyonel kod, lambda kalkülüsü ve tip teorisi ile nasıl ilişkilidir?

Temel kuramlar

Üst Düzey Fonksiyonlar ve Tembellikten Gelen Yapıştırıcı
Hughes, fonksiyonel programlamanın modülerlik avantajının, küçük, yeniden kullanılabilir program parçalarını birleştirmek için 'yapıştırıcı' görevi gören üst düzey fonksiyonlardan ve tembel değerlendirmeden geldiğini savunmaktadır.
Etkileri Yapılandırmak için Monadlar
Wadler, monadların, aksi takdirde saf olan fonksiyonel programlar aracılığıyla durumu, istisnaları ve diğer etkileri geçirmek için tekdüze, birleştirilebilir bir yol sağladığını göstermiştir.
Fonksiyonel Programların Cebiri
Backus'un fonksiyon düzeyinde programlaması, programlar hakkında akıl yürütmeyi ve onları dönüştürmeyi destekleyen denklemsel yasalarla birlikte kombinatörlerin bir cebirini sunmaktadır.

Klinik önem

Değişmezlik ve saf fonksiyonlar gibi fonksiyonel teknikler, paylaşılan değişebilir duruma bağlı hata sınıflarını azaltmakta ve kodu test etmeyi ve paralelleştirmeyi kolaylaştırmaktadır. Bu fikirler, lambda ifadeleri, değişmez koleksiyonlar ve akış/harita-indirgeme (stream/map-reduce) soyutlamaları aracılığıyla ana akım dillere geniş ölçüde yayılmıştır.

Tarihçe

Fonksiyonel programlama, Church'ün lambda kalkülüsüne ve McCarthy'nin Lisp'ine (1958) dayanmaktadır. 1970'ler ve 1980'ler ML, Miranda ve Scheme dillerini ortaya çıkarmıştır; Backus'un 1977 Turing dersi, zorunlu (imperative) programlama stiline yönelik fonksiyonel eleştiriyi ilerletmiştir. Haskell, 1990 civarında tembel, tamamen fonksiyonel programlamayı standartlaştırmış ve Wadler'ın monad tabanlı etki yönetimi, saf fonksiyonel programlamayı gerçek dünya görevleri için pratik hale getirmiştir.

Tartışmalar

Tembel ve Katı Değerlendirme
Fonksiyonel dil tasarımcıları, zarif sonsuz yapılar ve modülerlik sağlayan tembel (ihtiyaç anında çağırma) değerlendirmenin, katı değerlendirmeye kıyasla alan ve performans hakkında akıl yürütme maliyetlerine değip değmediğini tartışmaktadır.

Öne çıkan isimler

  • John Hughes
  • Philip Wadler
  • John Backus
  • Richard Bird
  • Simon Peyton Jones

İlgili konular

Temel eserler

  • hughes1989
  • wadler1992
  • backus1978
  • bird1998

Sıkça sorulan sorular

Referans şeffaflığı nedir?
Bir ifade, programın davranışını değiştirmeden değeriyle değiştirilebiliyorsa referans şeffaftır; bu durum, fonksiyonlar saf ve veriler değişmez olduğunda geçerlidir.
Fonksiyonel programlama, girdi/çıktı ve durumu nasıl ele alır?
Etkiler genellikle, örneğin monadlar veya etki sistemleri aracılığıyla açıkça modellenmektedir; böylece yan etkilerin sırası ve varlığı, mutasyondan dolaylı olarak ortaya çıkmak yerine tiplerde yakalanmaktadır.

Bu kavram için yöntemler

İlgili kavramlar