Fonksiyonel Programlama Dilleri

Slides:



Advertisements
Benzer bir sunumlar
OPERATÖRLER.
Advertisements

Karmaşıklık Giriş.
Fonksiyonlar.
Karar Verme: Eşitlik ve Karşılaştırma Operatörleri
mantIKSAL OPERATÖRLER
Fonksiyonel Programlama Dilleri
Bölüm 4 – Kontrol İfadeleri:1.kısım
4 Kontrol Yapıları: 1.Bölüm.
Bölüm 2: Program Denetimi
VERİ TABANI II- 4.HAFTA ALT SORGULAR Türetilmiş ve İLİntİlİ tablolar
BPR151 ALGORİTMA VE PROGRAMLAMA - I
Karar ifadeleri ve Döngüler
Fonksiyonlar ve Alt Programlar
Operatörler.
Bölüm 3 – Yapısal Programlama
T-SQL-2.Konu Akış Kontrolleri.
Diziler.
Yapısal Program Geliştirme – if, if-else
OPERATÖRLER.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
MANTIKSAL OPERATÖRLER
PROGRAM GELİŞTİRME 1.HAFTA.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ DERLEYENLER: Ahmet Can ÇAKIL Ali Murat GARİPCAN Özgür AYDIN Şahin KARA KONTROL : Prof. Dr. Asaf VAROL KONU : LİSTELERE.
Formüller Mustafa AÇIKKAR.
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Bölüm 2 – Kontrol Yapıları
Chapter 6: Using Arrays.
Chapter 4: Making Decisions
Temel Kavramlar, İşlemler, Operatörler
Derleyici Teorisine Giriş
Çoklu dallanma seçimi: switch
Bilgisayar Programlama
Mantıksal Operatörler ve Denetim Yapıları
BİL 102 BİLGİSAYAR PROGRAMLAMA
String class String karakterler dizisidir
Python Aslı Ergün.
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
Fonksiyonlar ile Çalışmak
Kabuk Programlama Shell Scripting(bash)
KÜMELER.
KÜMELER.
KÜMELER ERDİNÇ BAŞAR.
KÜMELER.
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
BMS-301 Kabuk Programlama Güz 2015 (6. Sunu) (Yrd. Doç. Dr. Deniz Dal)
2. HAFTA 2. Hafta.
Bölüm 3 Atama ve Girdi/Çıktı Komutları Bölüm 3 Atama ve Girdi/Çıktı Komutları Atama Komutu Operatörler İsim Sabitleri Veri Tipi Dönüşümü Çıktı Fonksiyonu.
Bölüm 14: Fonksiyonel Programlama Dilleri
ENDÜSTRİYEL GÖMÜLÜ BİLGİSAYAR SİSTEMLERİ
BM-103 Programlamaya Giriş Güz 2012 (3. Sunu)
BİLGİSAYAR PROGRAMLAMA DERSİ 4. DERS NOTU Konu: M-dosya yapısı ve Kontrol Yapıları 1.
Fonksiyonel Programlama
Bilgisayar Programlamasına ve Veri Analizine Giriş - IV
Programlama Dillerinin Temel Elemanları
Excel’de VBA Programlama (Visual Basic Application)
Algoritmanın Hazırlanması
Sentaks ve semantik tarifi
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Bilgisayar Programlama
Bölüm 7 İfadeler ve atamalar.
BLM-111 PROGRAMLAMA DİLLERİ I Ders-2 Değişken Kavramı ve Temel Operatörler Yrd. Doç. Dr. Ümit ATİLA
Komut düzeyi kontrol yapıları
Bilgisayar Bilimi Problem Çözme Süreci-2.
Bilgisayar Programlamasına ve Veri Analizine Giriş
Bilgisayar Mühendisliğine Giriş
Altprogramların gerçeklenmesi
NİŞANTAŞI ÜNİVERSİTESİ
VERİ TABANI II- 4.HAFTA ALT SORGULAR Türetilmiş ve İLİntİlİ tablolar
Bilgisayar Bilimi Problem Çözme Süreci-3.
4. HAFTA.
Sunum transkripti:

Fonksiyonel Programlama Dilleri Bölüm 15 Fonksiyonel Programlama Dilleri

15. Bölüm konuları Giriş Matematiksel fonksiyonlar Fonksiyonel programlama dillerinin temelleri İlk fonksiyonel programlama dili LISP Scheme Haskell Fonksiyonel dillerin uygulama alanları Fonksiyonel ve komut dillerinin karşılaştırması Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Giriş Komutlu diller direkt olarak von Neumann mimarisi ne dayalı Birinci öncelik verimlilik, yazılım geliştirmeye uygunluk değil Fonksiyonel dillerin tasarımı matematiksel fonksiyonlara dayalı Sağlam kuramsal temel. Kullanıcıya yakın. Üzerinde çalışacağı makine ile uyumunu önemli değil. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Matematiksel fonksiyonlar Matematiksel fonksiyon: bir kümeden başka bir kümeye eşleme lambda ifadesi: fonksiyonun parametrelerini belirtir. cube = (x).x * x * x Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Lambda ifadeleri Lambda ifadeleri isimsiz fonksiyonları belirtir Lambda ifadelerinin parametrelere uygulanışı: parametreler fonksiyondan sonra yazılır. ör: ((x). x * x * x) 2 (cevap: 8) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Yüksek-sıralı fonksiyon Yüksek-sıralı (higher-order) fonksiyon, başka bir fonksiyonu parametre olarak alır ve/veya netice olarak verir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Fonksiyon bileşimi (composition) İki fonksiyonu parametre olarak alıp, birinci fonksiyonu, ikinci fonksiyonun neticesine uygulayan tek bir fonksiyon veren yüksek sıralı bir fonksiyon. Gösterim: h  f ° g h (x)  f ( g ( x)) f (x)  x + 2 ve g (x)  3 * x ise h  f ° g = (3 * x)+ 2 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Hepsine-uygula Bir fonksiyon ve bir listeyi parametre olarak alıp, fonksiyonu listenin her elemanına uygulayan yüksek sıralı fonksiyon. Gösterim:  h (x)  x * x ise ( h, (2, 3, 4))bize (4,9,16)verir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Fonksiyonel programlama dillerinin temelleri Amaç: mümkün olduğunca matematik fonksiyonlarını taklit etmek Hesaplama yöntemi: Fonksiyon ugulama Değişkenler tek atamalık (bir tür sabit) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Atıfsal saydamlık (referential transparency) Saf bir fonksiyonel programlama dilinde, bir fonksiyonun parametrelere uygulanması her zaman ayni neticeyi verir (çağrılmanın nerde olduğunun önemi yok) Yerel olmayan tanımlanmışlara erişilmediğinde geçerli Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

LISP veri tipleri ve yapıları Veri tipleri: önceleri sadece atomlar ve listeler Liste şekli: parantez içinde alt listeler ve atomlar ör: (A B (C D) E) LISP listeleri, hafızada tekli bağlamalı listeler şeklinde saklanır. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

LISP tercümesi '(A B C) A, B ve C atomlarından oluşan listedir (A B C) B ve C parametrelerine uygulanan A fonksiyonudur Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Scheme 1970’lerde gerçeklenmiş, benzerlerine göre daha “temiz”, modern ve basit LISP lehçesi Statik etki alanı kullanır Fonksiyonlar birinci sınıf varlık İfadelerin değeri ve listelerin elemanı olabilirler Değişkenlere atanabilir, parametre olarak geçilebilirler Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Hesaplama Parametreler hesaplanır (sıra belirsiz) Parametrelerin değerleri fonskiyon gövdesinde paremetrelerin yerlerine konur. Gövdedeki son ifadenin değeri fonksiyonun değeridir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Basit fonksiyonlar Aritmetik: +, -, *, /, ABS, SQRT, REMAINDER, MIN, MAX ör: (+ 5 2) bize 7 verir QUOTE – tek parametre alır, parametreyi hesaplamadan verir Listeleri fonksiyon çağırması olarak değerlendirmemek için kullanılır QUOTE tek tırnak olarak da yazılabilir. '(A B) ile (QUOTE (A B)) ayni şeyi ifade eder Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Fonksiyon tanımı: LAMBDA Lambda ifadeleri (isimsiz fonksiyonlar) Şeklini  notasyonundan alır ör: (LAMBDA (x) (* x x)) x bağlı değişken olarak anılır (bound variable) Lambda ifadeleri uygulanabilirler ör: ((LAMBDA (x) (* x x)) 7) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Özel fonksiyon: DEFINE Foksiyon tanımlamaya yarayan ve sembollere değer bağlamaya yarayan özel şekil İki türü var: Sembolü değere bağlamak için ör: (DEFINE pi 3.141593) Kullanım örneği: (DEFINE two_pi (* 2 pi)) İsimleri lambda ifadelerine bağlamak için ör: (DEFINE (square x) (* x x)) şuna eşdeğer: (DEFINE square (lambda (x) (* x x))) Kullanım örneği: (square 5) - Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Özel fonksiyon: DEFINE… DEFINE için hesplama süreci diğer fonksiyonlara göre farklı. İlk parametre hiç hesplanmaz. Ikinci parametre hesaplanır ve birinciye bağlanır. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Çıktı (output) fonksiyonları (DISPLAY expression) (NEWLINE) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Sayısal yüklem (predicate) fonksiyonları #T doğru, #F yanlış demek. =, <>, >, <, >=, <= EVEN?, ODD?, ZERO?, NEGATIVE? Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Kontrol akışı: IF Seçim (IF predicate then_exp else_exp) ör: (IF (<> count 0) (/ sum count) 0) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Kontrol akışı: COND Çoklu seçim (COND (predicate_1 expr {expr}) ... (predicate_n expr {expr}) (ELSE expr {expr})) Önce doğru olan ilk şart bulunur, o şartın sağındaki son değer cevaptır. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

COND örneği (DEFINE (compare x y) (COND ((> x y) “x is greater than y”) ((< x y) “y is greater than x”) (ELSE “x and y are equal”) ) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

CONS ve LIST liste fonksiyonları CONS iki parametre alır. Birincisi bir atom veya liste, ikincisi bir liste. Birinci parametrenin ikinci parametrenin başına koyulmuş halini yeni bir liste olarak verir. ör: (CONS 'A '(B C)) bize ‘(A B C)verir. LIST aldığı parametrelerin listesini verir. Ör: (LIST 'a 'b 'c) bize '(a b c) verir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

CAR ve CDR liste fonksiyonları CAR liste cinsinden parametre alır, ilk elemanını verir Ör: (CAR '(A B C)) bize A verir (CAR '((A B) C D)) bize '(A B) verir CDR liste cinsinden parametre alır, listenin ilk elemanı dışındakileri liste olarak verir Ör: (CDR '(A B C)) bize '(B C)verir (CDR '((A B) C D)) bize '(C D) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

EQ? yüklem fonksiyonu EQ? İki sembol alır, ayni iseler #T, farklı iseler #F verir ör: (EQ? 'A 'A) bize #T verir (EQ? 'A 'B) bize #F verir Not: liste ile çağrılırsa, sonuç güvenilir değil EQ? sayısal atomlarla çalışmaz Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

LIST? ve NULL? Yüklem fonksiyonları LIST? tek parametre alır, eğer parametresi liste ise #T, değilse #F verir NULL? tek parametre alır, eğer parametresi boş liste ise #T, değilse #F verir Ör: (NULL? ‘()) bize #T verir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Örnek Scheme fonksiyonu: member member bir atom ve bir liste alır. Eğer atom listenin üyesi ise #T, değilse #F verir. (DEFINE (member atm lis) (COND ((NULL? lis) #F) ((EQ? atm (CAR lis)) #T) ((ELSE (member atm (CDR lis))) )) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Örnek Scheme fonksiyonu: equalsimp equalsimp iki tane liste alır, eşitseler #T , değilseler #F verir. (DEFINE (equalsimp lis1 lis2) (COND ((NULL? lis1) (NULL? lis2)) ((NULL? lis2) #F) ((EQ? (CAR lis1) (CAR lis2)) (equalsimp(CDR lis1)(CDR lis2))) (ELSE #F) )) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Örnek Scheme fonksiyonu: append append iki liste alır, birleştirilmiş olarak geri verir (DEFINE (append lis1 lis2) (COND ((NULL? lis1) lis2) (ELSE (CONS (CAR lis1) (append (CDR lis1) lis2))) )) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Scheme yapısı: LET (LET ( (name_1 expression_1) (name_2 expression_2) ... (name_n expression_n)) body ) Tüm ifadelerin değerini bul ve değişkenlere bağla, sonra gövdeyi (body) çağır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

LET örneği (DEFINE (quadratic_roots a b c) (LET ( (root_part_over_2a (/ (SQRT (- (* b b) (* 4 a c)))(* 2 a))) (minus_b_over_2a (/ (- 0 b) (* 2 a))) (DISPLAY (+ minus_b_over_2a root_part_over_2a)) (NEWLINE) (DISPLAY (- minus_b_over_2a root_part_over_2a)) )) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Scheme yüksek sıralı fonksiyonu Bir fonksiyonu listenin tüm elemanlarına uygula: (DEFINE (mapcar fun lis) (COND ((NULL? lis) ()) (ELSE (CONS (fun (CAR lis)) (mapcar fun (CDR lis)))) )) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Kod üreten fonksiyonlar Fonksiyon önce kod üretir, sonra kodun değerini bulur EVAL foksiyonu sayesinde Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Sayılardan oluşan listeyi topla ((DEFINE (adder lis) (COND ((NULL? lis) 0) (ELSE (EVAL (CONS '+ lis))) )) Önce liste başına + operatorünü koy, sonra bu yeni listeyi EVAL kullarak çalıştır (listenin değerini bul) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Haskell Statik etki alanı Kuvvetli tipli Tip çıkarımı Desen eşleme (pattern matching) Saf fonksiyonel fact 0 = 1 fact n = n * fact (n – 1) fib 0 = 1 fib 1 = 1 fib (n + 2) = fib (n + 1) + fib n Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Başka örnekler fact n | n == 0 = 1 | n > 0 = n * fact(n – 1) sub n | n < 10 = 0 | n > 100 = 2 | otherwise = 1 square x = x * x Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Listeler Liste notasyonu: Elemanlar köşeli parantez içinde ör: directions = ["north", "south", "east", "west"] Uzunluk operatörü: # ör: #directions = 4 .. Operatorü ile aritmetik seriler ör: [2, 4..10] = [2, 4, 6, 8, 10] Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Listeler... Liste birleştirme operatörü: ++ CONS, CAR, CDR : operatorü ile ör: 1:[3, 5, 7]=[1, 3, 5, 7] Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Factoriyel yeniden product [] = 1 product (a:x) = a * product x fact n = product [1..n] Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Liste kapsamlama (comprehension) Küme notasyonu İlk 20 pozitif tamsayının karesi: [n * n | n ← [1..20]] Bir tamsayının tüm çarpanları: factors n = [i | i ← [1..(n div 2)], (n mod i) == 0] Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Quicksort sort [] = [] sort (a:x) = sort [b | b ← x; b <= a] ++ Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Tembel hesaplama (lazy evaluation) Bir dil eğer tüm fonksiyon parametrelerinin tamamen hesplanmasını gerektiriyorsa, bu dile sıkı (strict) denir. Aksi halde dile gevşek (nonstrict) denir. Gevşek diller daha verimlidirler ve sonsuz listelere olanak tanırlar. Tembel hesaplama: Sadece ihtiyacın olan ifadelerin değerini bul. Pozitif sayılar positives = [0..] 16 tam karemidir? member b [] = False member b(a:x) = (a == b)||member b x squares = [n * n | n ← [0..]] member 16 squares Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Member yeniden member eğer aradığımız eleman listedeyse çalışır. Aksi hade sonsuza kadar gider. Aşağıdaki fonksiyonun öyle bir sorunu yok. member2 n (m:x) | m < n = member2 n x | m == n = True | otherwise = False Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Fonksiyonel dillerin uygulama alanları LISP, Haskell vs. yapay zekada kullanılır Biigi temsiliyeti (knowledge representation) Makine öğrenmesi (machine learning) Doğal dil işleme (natural language processing) Konuşma ve görme modellemesi Scheme bazı üniversitelerde programlamaya giriş dersi olarak kullanılır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Fonksiyonel ve komut dillerinin karşılaştırması Verimli çalışma Karmaşık semantik Karmaşık sentaks Paralellik programcının sorumluluğunda Fonksiyonel diller: Verimsiz çalışma Basit semantik Basit sentaks Programlar otomatik olarak paralel hale getirilebilir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ

Özet Fonksiyonel diller, değişkenler, atamalar ve döngüler gibi komut dillerine ait yapılar yerine, fonksiyon uygulaması, şartlı ifadeler, özyineleme ve yüksek seviyeli fonksiyonlar kullanırlar LISP önceleri saf bir fonksiyonel dil olarak başladı ama sonraları komut dilleri yapıları dahil edildi Scheme sadece statik etki alanı kullanan bir LISP lehçesidir Haskell sonsuz listeleri ve küme kapsamlarını (list comprehension) destekleyen tembel bir fonksiyonel dildir Saf fonksiyonel dillerin komutlu dillere göre avantajları vardır ama komutlu dillere göre varolan bilgisayar mimarileri üzerinde daha yavaş çalıştıklarından çok yaygın kullanıma ulaşmadılar Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ