Академический Документы
Профессиональный Документы
Культура Документы
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,
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
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
1531
1532
1533
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
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
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