Вы находитесь на странице: 1из 58

Blm 15

Fonksiyonel
ProgramlamaDilleri

ISBN0321193628

Blm 15 Topics
Giri
MatematikselFonksiyonlar
FonksiyonelProgramlamaDillerinin(Functional
ProgrammingLanguages)Temelleri
lkFonksiyonelProgramlamaDili:LISP
SchemeeGiri
COMMONLISP
ML
Haskell
Fonksiyoneldillerinuygulamalar
Fonksiyonel(Functional)veBuyurgan(zorunlu
Imperative)DillerinKarlatrlmas
Copyright2004Pearson

152

Giri
Buyurgan(imperative)dillerintasarm
dorudandoruyavonNeumannmimarisine
dayanr
lgilenilenbalcakonudilinyazlmgelitirme
iinuygunluudanziyadeverimliliidir

Copyright2004Pearson

153

Giri
FonksiyoneldillerintasarmMatematiksel
Fonksiyonlaradayaldr
Kullancyadayaknolansalambirteoriktemel,
fakatnispetenprogramlarnkoacamakinelerin
mimarileriyleilgisizdir

Copyright2004Pearson

154

Matematiksel Fonksiyonlar
Tanm:Birmatematikselfonksiyon,tanm
kmesi(domainset)adverilenbir
kmenin(set)yelerinin(members),deer
kmesi(rangeset)adverilendierbirkme
ileelenmesidir(mapping)
Birlambdaifadesi(lambdaexpression)bir
fonksiyonunparametresini/parametrelerinive
elenmesini(mapping)belirler
(x)x*x*x
cube(x)=x*x*xfonksiyonuiin.
Copyright2004Pearson

155

Matematiksel Fonksiyonlar
Lambdaifadeleriadszfonksiyonlartanmlar
Lambdaifadelerininparametreye(lere)
uygulanmas,parametrenin(lerin)ifadenin
sonunagetirilmesiyleolur
rn.((x)x*x*x)(3)
sonu27

Copyright2004Pearson

156

Fonksiyon Biimleri
1.FonksiyonBileimi(FunctionComposition)
Parametreolarakikifonksiyonalanvesonu
olarak,deeriilkgerek(actual)parametre
fonksiyonunikincisineuygulanmasolanbir
fonksiyonverenfonksiyonelform

Form:hfg
uanlamagelirh(x)f(g(x))
f(x)x*x*xveg(x)x+3iin,
hfgusonucuverir:

(x+3)*(x+3)*(x+3)
Copyright2004Pearson

157

Fonksiyon Biimleri
2.Yapm(Construction)
Parametreolarakfonksiyonlardanoluanbirliste
alanvesonuolarakherbirparametre
fonksiyonunuverilenbirparametreyeuygulama
sonularnnlistesiniverenfonksiyonelform

Form:[f,g]
f(x)x*x*xveg(x)x+3iin,
[f,g](4)insonucu:(64,7)dr

Copyright2004Pearson

158

Fonksiyon Biimleri
3.Tmneuygula(Applytoall)
Parametreolarakbirtekfonksiyonalanvesonu
olarakparametrelerdenoluanbirlisteninherbir
elemannaverilenfonksiyonunuygulanmasyla
eldeedilendeerlerdenoluanbirlistedndren
fonksiyonelform

Form:
h(x)x*x*xiin
(h,(3,2,4))insonucu:(27,8,64)
Copyright2004Pearson

159

Fonksiyonel Programlama
Dillerinin Temelleri
BirFPLtasarlamannamacmatematiksel
fonksiyonlarmmknolduuncataklitetmektir
BirFPLdekitemelhesaplamailemi
buyurgan(imperative)dildekindenfarkldr
Birbuyurgan(imperative)dilde,ilemleryaplrvesonular
dahasonrakullanmiindeikenlerde(variables)tutulur
Srekliilgilenilenvebuyurgan(imperative)programlamann
karmaklkkaynaolaneydeikenlerin(variables)
ynetimidir

BirFPLde,deikenler(variables),matematikte
olduugibigereklideildir

Copyright2004Pearson

1510

Fonksiyonel Programlama
Dillerinin Temelleri
BirFPLde,birfonksiyonaynparametreler
verildiindedaimaaynsonucuretir
Bunareferentialtransparencyadverilir

Copyright2004Pearson

1511

LISP
Verinesnesitipleri(Dataobjecttypes):
atomlar(atoms)velisteler(lists)
Listebiimi(Listform):altliste(sublist)
ve/veyaatomlarnparantezealnm
koleksiyonlar
rn.,(AB(CD)E)
LISP,tipsiz(typeless)birdildir
LISPlisteleri,tekballiste(singlelinked
lists)olaraksaklanr
Copyright2004Pearson

1512

LISP
Lambdagsterimifonksiyonlarvefonksiyon
tanmlarnbelirtmekiinkullanlr.Fonksiyon
uygulamalarveveriaynbiimesahiptir.
rn.,Eer(ABC)listesi,veri(data)olarak

yorumlanrsa,A,B,veCdiyeatomdan
oluanbasitbirlistedir
Eerbirfonksiyonuygulamasolarak
yorumlanrsa,AadndakifonksiyonunBve
C
adndakiikiparametreyeuygulanmasanlamnagelir
lkLISPyorumlaycs(interpreter),sadece
gsterimin(notation)saysalhesaplama
yeteneklerininevrenselliininispatolarakortaya
kmtr
Copyright2004Pearson

1513

Scheme e Giri
1970lerinortalarndakmbirLISP
diyalektidir,adaLISPdiyalektlerinindaha
temiz,dahamodern,vedahabasitbir
versiyonudur
Sadecestatikkapsama(staticscoping)kullanr
Fonksiyonlarbirincisnfvarlklardr(entities)
fadelerin(expressions)deerlerivelistelerin
elemanlarolabilirler
Deikenlere(variables)atanabilirlerve
parametreleregeilebilirler
Copyright2004Pearson

1514

Scheme e Giri

lkel(Primitive)Fonksiyonlar

1.Aritmetik:+, -, *, /, ABS,

SQRT, REMAINDER, MIN, MAX


rn.,(+52)ninsonucu:7

Copyright2004Pearson

1515

Scheme e Giri
2. QUOTEbirparametreyialr;onu
deerlendirmedengeridndrr
QUOTEgereklidirnkScheme
yorumlaycs(interpreter)olanEVAL,herzaman
fonksiyonuuygulamadannceparametreleri
fonksiyonuygulamalarndadeerlendirir.
QUOTE,parametreleruygunolmadzaman
onlarndeerlendirilmesininlemekiinkullanlr
QUOTE,kesmeiareti(apostrophe)nek(prefix)
operatryleksaltlabilir

rn.,'(AB)unaeittir:(QUOTE(AB))
Copyright2004Pearson

1516

Scheme e Giri
3. CARbirparametrelistesinialr;olisteninilk
elemanndndrr
rn.,(CAR'(ABC))sonucu:A
(CAR'((AB)CD))sonucu:(AB)
4. CDRbirparametrelistesinialr;ilkelemann
kopardktansonralisteninkalanndndrr
rn.,(CDR'(ABC))sonucu:(BC)
(CDR'((AB)CD))sonucu:(CD)
Copyright2004Pearson

1517

Scheme e Giri
5.CONSikiparametrealr,bunlarnbirincisibir
atomveyabirlisteolabilirveikincisibir
listedir;sonuolarakilkelemanolarak
birinciparametreyi,sonucununkalanolarak
daikinciparametreyiierenyenibirliste
dndrr
rn.,(CONS'A'(BC))sonu:(ABC)

Copyright2004Pearson

1518

Scheme e Giri
6.LISTherhangibirsaydaparametrealr;
elemanlarbuparametrelerolanbirliste
dndrr

Copyright2004Pearson

1519

Scheme e Giri
Lambdafadeleri(Expressions)
Biimigsterimine(notation)dayaldr

rn.,(LAMBDA(L)(CAR(CARL)))
Lyebamldeiken(boundvariable)denir
Lambdaifadeleriuekildeuygulanabilir
rn.,
((LAMBDA(L)(CAR(CARL)))'((AB)CD))

Copyright2004Pearson

1520

Scheme e Giri
Fonksiyonlaroluturmakiinbirfonksiyon:
DEFINEkibiimdedir:
1.Birsembol(symbol)bir
ifadeye(expression)balama
rn.,
(DEFINEpi3.141593)
(DEFINEtwo_pi(*2pi))

Copyright2004Pearson

1521

Scheme e Giri
2.Adlar(names)lambdaifadelerinebalama
rn.,
(DEFINE(cubex)(*xxx))
rnekkullanm:
(cube4)

Copyright2004Pearson

1522

Scheme e Giri
Deerlendirmeilemi(normalfonksiyonlar
iin):
1.Parametrelerbellibirsrayabalolmadan
deerlendirilir
2.Parametrelerindeerlerifonksiyongvdesinde
yerinekonur
3.Fonksiyongvdesideerlendirilir
4.Gvdedekisonifadenindeerifonksiyonun
deeridir
(zelbiimlerfarklbirdeerlendirmeilemi
kullanr)
Copyright2004Pearson

1523

Scheme e Giri
rnekler:
(DEFINE (square x) (* x x))
(DEFINE (hypotenuse side1 side1)
(SQRT (+ (square side1)
(square side2)))
)

Copyright2004Pearson

1524

Scheme e Giri
Predicate(Hkm)Fonksiyonlar:(#Ttrueve()
false)
1.EQ?kisembolikparametrealr;eerherikiside
atomsaveaynise#Tdndrr

rn.,(EQ? 'A 'A)sonu:#T


(EQ? 'A '(A B))sonu:()
DikkatedilmelidirkieerEQ?listeparametrelerle
arlrsa,sonugvenilirolmaz
Birde,EQ?saysal(numeric)atomlariinalmaz
Copyright2004Pearson

1525

Scheme e Giri
PredicateFonksiyonlar:
2.LIST?Birparametrealr;parametrebirlisteise#T;
deilse() dndrr
3.NULL?Birparametrealr;parametrebirbo(empty)
listeise#T;deilse() dndrr

DikkatedilmelidirkiNULL?,eerparametre()ise#T
dndrr
4.SaysalHkm(NumericPredicate)Fonksiyonlar
=, <>, >, <, >=, <=, EVEN?, ODD?,
ZERO?, NEGATIVE?
Copyright2004Pearson

1526

Scheme e Giri
ktYardmc(OutputUtility)Fonksiyonlar:
(DISPLAY expression)
(NEWLINE)

Copyright2004Pearson

1527

Scheme e Giri
Kontrolak
1.Seim(Selection)zelbiim,IF
(IF predicate then_exp
else_exp)
rn.,
(IF (<> count 0)
(/ sum count)
0
)
Copyright2004Pearson

1528

Scheme e Giri
Kontrolak
2.okluSeimzelbiim,COND
Genelbiim:
(COND
(predicate_1 expr {expr})
(predicate_2 expr {expr})
...
(predicate_n expr {expr})
(ELSE expr {expr})
)
Ensondakiexprnindeerinihkm(predicate)
truedeeriverenbirinciiftte(pair)dndrr
Copyright2004Pearson

1529

COND rnei
(DEFINE (compare x y)
(COND
((> x y) (DISPLAY x, yden
byktr))
((< x y) (DISPLAY y, xten
byktr))
(ELSE (DISPLAY x ve y
eittir))
)
)
Copyright2004Pearson

1530

rnek Scheme Fonksiyonlar


1.memberbiratomvebirbasitlistealr;eer
atomlistedevarsa#T;yoksa() dndrr
(DEFINE (member atm lis)
(COND
((NULL? lis) '())
((EQ? atm (CAR lis)) #T)
((ELSE (member atm (CDR
lis)))
))
Copyright2004Pearson

1531

Example Scheme Fonksiyonlar


2.equalsimpparametreolarakikibasitlistealr;iki
listebirbirineeitse#T;deilde()dndrr
(DEFINE (equalsimp lis1 lis2)
(COND
((NULL? lis1) (NULL? lis2))
((NULL? lis2) '())
((EQ? (CAR lis1) (CAR lis2))
(equalsimp(CDR lis1)(CDR lis2)))
(ELSE '())
))
Copyright2004Pearson

1532

Example Scheme Fonksiyonlar


3.equalparametreolarakikigenellistealr;ikiliste
birbirineeitse#T;deilse()dndrr
(DEFINE (equal lis1 lis2)
(COND
((NOT (LIST? lis1))(EQ? lis1 lis2))
((NOT (LIST? lis2)) '())
((NULL? lis1) (NULL? lis2))
((NULL? lis2) '())
((equal (CAR lis1) (CAR lis2))
(equal (CDR lis1) (CDR lis2)))
(ELSE '())
))
Copyright2004Pearson

1533

Example Scheme Fonksiyonlar


4.appendparametreolarakikilistealr;birinci
parametrelistesininsonunaikinciparametrelistesinin
elemanlarnekleyerekgeridndrr
(DEFINE (append lis1 lis2)
(COND
((NULL? lis1) lis2)
(ELSE (CONS (CAR lis1)
(append (CDR lis1) lis2)))
))

Copyright2004Pearson

1534

Scheme e Giri
LET fonksiyonu
Genelbiim:

(LET (
(name_1 expression_1)
(name_2 expression_2)
...
(name_n expression_n))
body
)
Semantik(Semantics):btnifadelerideerlendir,sonra
deerleri(values)adlara(names)bala;gvdeyi(body)
deerlendir

Copyright2004Pearson

1535

Scheme e Giri
(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))
))

Copyright2004Pearson

1536

Scheme e Giri
FonksiyonelBiimler
1.Bileim(Composition)
ncekirneklerbunukulland
2.TmneUygula(ApplytoAll)Schemedebirbiim
mapcar
Verilenfonksiyonuverilenbirlisteninbtnelemanlarna
uygular;sonu,sonulardanoluanbirlistedir
(DEFINE (mapcar fun lis)
(COND
((NULL? lis) '())
(ELSE (CONS (fun (CAR lis))
(mapcar fun (CDR lis))))
))

Copyright2004Pearson

1537

Scheme e Giri
Schemede,Schemekodunuoluturanve
yorumlanmasn(interpretation)isteyenbirfonksiyon
tanmlamakmmkndr
Bummkndrnkyorumlayc(interpreter)kullanc
tarafndaneriilebilen(useravailable)birfonksiyondur,
EVAL
rn.,farzedelimkibirbiriyletoplanmasgereken
saylardanoluanbirlistemizvar
(DEFINE (adder lis)
(COND
((NULL? lis) 0)
(ELSE (+ (CAR lis)
(adder(CDR lis ))))
))
Copyright2004Pearson

1538

Bir Listedeki Saylar Toplama


((DEFINE (adder lis)
(COND
((NULL? lis) 0)
(ELSE (EVAL (CONS '+ lis)))
))
Parametre,eklenmesigerekensaylardan
oluanbirlistedir;adderarayabir+
operatreklervesonutakilisteyiyorumlar
Copyright2004Pearson

1539

Scheme e Giri
Schemebazbuyurgan(zorunluimperative)
zelliklerierir:
1.SET!birdeeri(value)birada(name)
balar(bind)veyayenidenbalar(rebind)
2.SET-CAR!birlistenincar ndeitirir
3.SET-CDR!birlistenincdrksmndeitirir

Copyright2004Pearson

1540

COMMON LISP
LISPinpoplerdiyalektlerineaitou
zelliklerin1980lerinbalarndaortayakm
birbirleimidir
BykvekarmakbirdildirSchemenin
tersi

Copyright2004Pearson

1541

COMMON LISP
erii:

kaytlar(records)
diziler(arrays)
karmaksaylar(complexnumbers)
karakterstringleri(characterstrings)
glI/Oyetenekleri
eriimkontroll(accesscontrol)paketler
Schemedekigibibuyurgan(imperative)zellikler
yinelenen(iterative)kontrolifadeleri
Copyright2004Pearson

1542

COMMON LISP
rnek(yinelenenkmeyelii,member(ye))
(DEFUN iterative_member (atm lst)
(PROG ()
loop_1
(COND
((NULL lst) (RETURN NIL))
((EQUAL atm (CAR lst))(RETURN T))
)
(SETQ lst (CDR lst))
(GO loop_1)
))

Copyright2004Pearson

1543

ML
SentaksLISPdendahaokPascalayaknolanbir
statikkapsaml(staticscoped)fonksiyoneldildir
Tiptanmlamalar(typedeclarations)kullanr,fakatayn
zamandatanmsz(undeclared)deikenlerintiplerini
belirlemekiintipkarma(typeinferencing)kullanr
(Blm5deanlatlacak)
Stronglytypedtr(Schemetemeldetipsizdir(typeless))
vetipbasks(typecoercions)yoktur
stisnayakalama(exceptionhandling)vesoyutveri
tipleri(abstractdatatypes)oluturmakiinbirmodl
zelliiierir
Copyright2004Pearson

1544

ML
Listelervelisteilemleriierir
valifadesibiradbirdeere(value)balar
(SchemedekiDEFINEaokbenzer)
Fonksiyontanmlamabiimi:
funfonksiyon_ad(formal_parametreler)=
fonksiyon_govdesi_ifadesi;
rn.,
fun cube (x : int) = x * x * x;
Copyright2004Pearson

1545

Haskell
MLebenzer(sentaks,statikkapsaml(static
scoped),stronglytyped,typeinferencing)
MLden(veoudierfonksiyoneldillerden)
farkldrnktamamen(purely)
fonksiyoneldir(rn.,deikenleryoktur,
atamaifadeleriyoktur,hibireityanetki
yoktur)

Copyright2004Pearson

1546

Haskell
Ennemlizellikler
Tembeldeerlendirme(lazyevaluation)kullanr
(deergerekmediisrecehibiraltifadeyi
deerlendirme)
Listekapsamlar(listcomprehensions),sonsuz
listelerlealabilmeyeizinverir

Copyright2004Pearson

1547

Haskell rnekleri
1.Fibonaccisaylar(fonksiyontanmlarn
farklparametrebiimleriylegsterir)
fib 0 = 1
fib 1 = 1
fib (n + 2) = fib (n + 1)
+ fib n

Copyright2004Pearson

1548

Haskell rnekleri
2.Faktoriyel(Factorial)(guardlargsterir)
fact n
| n == 0 = 1
| n > 0 = n * fact (n - 1)
zelkelimeotherwiseguardolarak
grnebilir

Copyright2004Pearson

1549

Haskell rnekleri
3.Listeilemleri
Listegsterimi(notation):elemanlarkeliparantez
iineyaz
rn.,directions = [north,
south, east, west]
Uzunluk(Length):#
rn.,#directions is 4
..operatorilearitmetikseriler
rn.,[2, 4..10] is [2, 4, 6, 8, 10]

Copyright2004Pearson

1550

Haskell rnekleri
3.Listeilemleri(devam)
++ilezincirleme(Catenation)
rn.,[1, 3] ++ [5, 7]usonucuverir:
[1, 3, 5, 7]
kinokta(colon)operattyoluylaCONS,CAR,
CDR(Prologdakigibi)
rn.,1:[3, 5, 7]ninsonucu:
[1, 3, 5, 7]

Copyright2004Pearson

1551

Haskell rnekleri
product [] = 1
product (a:x) = a * product x
fact n = product [1..n]

Copyright2004Pearson

1552

Haskell rnekleri
4.Listekapsamlar(comprehensions):kme
gsterimi(setnotation)
rn.,[n * n | n [1..20]]
ilk20pozitiftamsaynnkarelerindenoluan
birlistetanmlar
factors n = [i | i [1..n div
2],
n mod i == 0]
Bufonksiyonverilenparametreninbtn
faktrlerini(arpan)hesaplar
Copyright2004Pearson

1553

Haskell rnekleri
Quicksort(HzlSralama):
sort [] = []
sort (a:x) = sort [b | b x; b
<= a]
++ [a] ++
sort [b | b x; b > a]

Copyright2004Pearson

1554

Haskell rnekleri
5.Tembeldeerlendirme(Lazyevaluation)
rn.,
positives = [0..]
squares = [n * n | n [0..]]
(sadecegerekliolanlarhesapla)
rn.,member squares 16
Truedndrr

Copyright2004Pearson

1555

Haskell rnekleri
ye(member)uekildedeyazlabilirdi:
member [] b = False
member(a:x) b=(a == b)||member x b
Ancak,busadecekare(square)olanparametre
tamkareolduuzamanalacakt;eerdeilse,
sonsuzakadarretmeyedevamedecekti.uversiyon
herzamanalr:
member2 (m:x) n
| m < n
= member2 x n
| m == n
= True
| otherwise = False
Copyright2004Pearson

1556

Fonksiyonel Dillerin uygulamalar

APLatlan(throwaway)programlariinkullanlr
LISPyapayzeka(artificialintelligence)iinkullanlr

Bilgigsterimi
Makinerenmesi(Machinelearning)
DoalDilleme(Naturallanguageprocessing)
Konumavegrmeyimodelleme

Schemebirokniversitedeprogramlamay
retmeyegiriiinkullanlr

Copyright2004Pearson

1557

Fonksiyonel ve
Buyurgan(imperative) Dillerin
Karlatrlmas
buyurgan(imperative)diller:

Verimlialma
Karmaksemantik(semantics)
Karmaksentaks(syntax)
Ezamanllk(Concurrency)programctarafndantasarlanr

fonksiyoneldiller:

Basitsemantik(semantics)
Basitsentaks(syntax)
Verimsizalma
Programlarotomatikolarakezamanl(concurrent)
yaplabilir

Copyright2004Pearson

1558

Вам также может понравиться