Photo by Mari Helin on Unsplash

JS ILE FONKSIYONEL PROGRAMLAMA

Fonksiyonel Programlamanın Başlangıcı

Fonksiyonel Programlama yeni yeni popüler olmaya başlamış gibi gözüksede aslında tarihi oldukça eski. Hatta günümüz yazılım programlama paradigmaları oluşturan Alan Turing ve Alonzo Crunch ilk olarak ortaya attığı programlama modeli fonksiyonel programlamanın temeli olan Lambda Calculus’tur.

Onur Dayıbaşı
Frontend Development With JS
3 min readFeb 23, 2020

--

Bu yazıyı daha önceden yazmış olduğum JS ile Fonksiyonel Programlama yazısının bir devamı olarak yazıyorum. Bir çok kavramı tek bir yazıda ele almanın yaratacağı karmaşıklıktan kaçmak için bu şekilde bir yönteme başvurdum.

Fonksiyonel Programlama’nın başlangıcı aslında ilk evrensel programlama makinesinin (TM) tasarlanması ve teorinin atılması ile başlıyor.

Yani Charles Babbage (Analytic Engine)→ Ada Lovelace (First Program on Baggage)→ Hermann Hollerith (Punch Card) → Alan Turing (Turing Machine) → ….

FP hikayesi Alan Turing ve Alonzo Chruch oluşturduğu Chruch-Turing Tezi sonrasında ortaya çıkıyor.

Alan Turing Evrensel Turing Makinesi ile David Hilbert and Wilhelm Ackermann 1928 yılında Entscheidungsproblem denilen karar verme problemini matemetiksel olarak formülasyonunu işleterek çözebilecek evrensel bir programlama aracı üretme sonucu tekrar programlanabilir ilk bilgisayar prototipini ortaya çıkarmış.

Turing Mekanizması ve “Bombee” Enigma kodunu deşifre eden makina

TM(Turing Machine) bir mekanizma. Teyip üzerinde bilgileri koyabileceğiniz şeritler mevcut. Kontrol mekanizması bu şeritleri ileri ve geri hareket ettirerek ve okuyucu/yazıcı kafanın bulunduğu şeritteki veriyi Okuyabilen(READ), Yazabilen(WRITE) bir mekanizmaya sahip. Sistem sizin programınızı işletirken sürekli olarak bu basit mekanizmayı işletiyor. Tabi bunun makineye göre program oluşturmak hiç de kolay değil. Turing Makinesinin nasıl işlediği ile ilgili aşağıya birkaç link ekliyeceğim

Aynı dönemde Alonzo Crunch Lambda(λ) Calculus sistemini oluşturuyor. Bu sistem matematiksel mantık ile bilgisayar bilimini hesaplama oluşturmak için soyutlamayı(abstraction) kullanarak değişkenleri birleştirerek hesaplama yapmasını sağlar.

Toplama için sum(a,b) , çarpma için ayrı bir multiply(a,b) bir mekanizmaya ihtiyaç var.

Toplama ve Çarpa

Sonuçta girdisi olan ve bunu işleyen ve çıktıya dönüştüren P programına ihtiyaç duyuyoruz.

Function I/O

Peki bu programların sayısı arttığında her bir fonksiyon için ayrı bir program mekanizması olması yerine. ortak tekrar programlanabilen evrensel bir mekanizmaya ihtiyacı var. İşte Universal Turing Machine burda devreye giriyor.

Burda kastedilen punch kart tek seferde işletilen programlar yerine tekrar tekrar işletilebilen aynı mekanizma içerisinde farklı programların çalıştırılabildiğini, bir programın çıktısının diğer program tarafından işletilebildiği mekaniklerin oluşturduğu TM (Turing Machine) .

Universal Programming Logic

Bu yapının üzerine Lambda(λ) Calculus bir fonksiyonun diğer fonksiyonu kapsaması ve işletmesi üzerine çalışır. Modern JS ES6 karşılığı bu.

sum=(a,b)=>a+b 
multiply=(a,b)=>a*b
A=3, B=2, C=1
result=multiply(sum(B,C),A) //9
Function Composition Nasıl Gerçekleşir

Burda Turing Machine (TM) problemi çözmek için bir yöntem oluşturmuştur. Bunun üzerine Alonzo Crunch geliştirdiği Lamda(λ) Calculus ile matematiksel spesifikasyonu ortaya konulmuştur.

Lambda İfadesi (+ 4 5) işlemi Lambda ifadesi ile soyutlanarak matematiksel işleme dönüştürülür.

Lambda Expression

Sizin yapmak istediğiniz işlemler aşağıdaki örnekte olduğu gibi Lambda ifadesi olarak yazılıp sonrasında Turing Makinesi üzerinde işletilecek fonksiyonlara dönüştürülürler.

Matematiksel Bir İşlemin Lambda İfadesi ile Yazımı

Referanslar

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--