Ievads funkcionalaja programme - PowerPoint PPT Presentation

About This Presentation
Title:

Ievads funkcionalaja programme

Description:

Viens centr lais procesors sec gi izpilda instrukcijas. Programmas semantika dabiski skaidrota k instrukciju virkne. Funkcion l programm ana: ... – PowerPoint PPT presentation

Number of Views:42
Avg rating:3.0/5.0
Slides: 35
Provided by: Karlis5
Category:

less

Transcript and Presenter's Notes

Title: Ievads funkcionalaja programme


1
Ievads funkcionalaja programmešana
  • Datorzinatnes pamati

2
Programmešanas veidi (paradigmas) 1
  • Imperativa programmešana (PASCAL, BASIC, C, C,
    ADA, FORTRAN, u.c.)Vesturiski pirmais
    programmešanas veids, imite datora ka fiziskas
    iekartas piedavato abstraktas mašinas modeli.
    Mainiga jedziens, iespeja mainit mainiga vertibu
    programmas izpildes gaita analogs datora
    atminas šunas jedzienam. Pieškiršanas operators.
    Viens centralais procesors secigi izpilda
    instrukcijas. Programmas semantika dabiski
    skaidrota ka instrukciju virkne.
  • Funkcionala programmešana
  • Ideja programma ir funkcija, programmas izpilde
    funkcijas pielietošana argumentam.
  • Mainigie analogiski ka matematika var glabat
    patvaligu, bet fiksetu vertibu. Nav pieškiršanas
    operatora.
  • Virknes kompozicijas vieta funkciju
    kompozicija, ciklu vieta rekursija (tiras
    funkcionalas programmas). Iespejamas funkcijas,
    kuru argumenti un rezultati ari ir funkcijas
    (augstakas kartas funkcijas).
  • Funkcionala programmešana valoda LISP 1960.
    gada, talak krietni attistijusiespieejamas
    valodas ar datu tipiem, strukturetam programmu
    uzdošanas iespejam ML, HASKELL, MIRANDA.
    Aplukosim tuvak valodu ML.

3
Programmešanas veidi (paradigmas) 2
  • Logiska programmešana PROLOG
  • Programma zinašanu baze, apgalvojumi par to,
    kas ir zinams par problemu apgabalu, kas ietver
    zinas par iegustamo rezultatu.
  • Programmas izsaukums merka predikats.
    Programmai janoskaidro, vai merka predikata
    patiesumu var izvest no pieejamas zinašanu bazes.
    Ja merka predikats satur mainigos, programma
    atrod mainigo vertibas, ar kuram merka predikats
    klust patiess.
  • Valoda PROLOG tira logiska programmešana,
    plus risinajuma meklešanas vadibas direktivas.
  • Objektorienteta programmešana SIMULA, SMALLTALK,
    C, JAVA, EIFFEL, u.c.
  • Programma ka aktivu objektu kopums. Katram
    objektam atributi un metodes, publiska un privata
    dala. Objekta tips klase, iespejamas klašu
    hierarhijas, mantošana.
  • Viens no praktiski visnozimigakajam
    programmešanas veidiem.
  • Paralela programmešana Paraleli programmu
    izpildes pavedieni. Kopeja atminas izmantošana,
    zinojumu apmaina (sinhronizacija, u.c.)
  • Vizuala programmešana vizualie objekti un to
    klases, datu ievads caur formam, proceduru
    izpilde, reagejot uz notikumiem.

4
Funkcionala programmešana raksturojums
  • Funkcionala programmešanas stila raksturojums
    (funkcionala programmešana tira forma)
  • Programma ir funkcija, kas ieejas datus attelo
    par izejas datiem. Programmas izpilde funkcijas
    pielietošana argumentiem.
  • Visas proceduras un funkcijas skaidri nodala
    ienakošas vertibas (argumentus) no izejošajam
    vertibam (rezultatiem).
  • Netiek izmantoti mainiga (ka atminas šunai
    piesaistita varda) un pieškiršanas operatora
    jedzieni mainigie tiek aizstati ar parametriem.
  • Netiek izmantoti cikli cikli ir aizstati ar
    rekursiviem izsaukumiem.
  • Funkcijas vertiba ir atkariga tikai no tas
    parametru vertibas, un nevis no funkcijas
    aprekinašanas kartibas, vai ari no izpildes cela,
    kas novedis lidz šis funkcijas izsaukumam.
  • Funkcijas ir pilnvertigas (pirmas škiras)
    vertibas, valodas izteiksmes lietojamas tapat ka
    jebkadas citas vertibas.
  • Funkcionalas valodas ir pieejamas ari ipašibas,
    kas atkapjas no ši stila.
  • Funkcionalas programmešanas butiskas iezimes
  • Funkciju kompozicija ka butisks strukturizacijas
    lidzeklis
  • Visparigas (augstakas kartas) funkcijas, kuru
    argumenti ari ir funkcijas
  • Aizturetas izpildes paradigma (dala valodu)
    iespejas darbibas definet bezgaligu objektu
    limeni (ka matematiska notacija).

5
Funkcionala programmešana ieskats vesture
  • Funkcionalas programmešanas sakums Lambda
    rekini, matematiska sistema funkciju uzdošanai un
    aprekinašanai, 1935. gads.
  • l - termi M x lx.M M N x - mainigais
    lx.M - abstrakcija (funkcija x ? M, parasti M
    M(x)) M N - aplikacija terms - funkcija M tiek
    pielietots argumenta termam N
  • Piemers funkciju x ? x2 apzime ka lx.x2
    x2 var tikt ieviests
  • Fakts. Lambda rekinos var aprakstit tas un
    tikai tas funkcijas, kas ir izrekinamas ar
    Tjuringa mašinu.
  • Plašaka informacija nakamaja lekcija.
  • Funkcionalas programmešanas valoda LISP, John
    McCarthy, 1958.g.
  • Programmas, dati tiek uzdoti ka saraksti.
  • Vertibas, kas ir funkcijas, ir tikpat plaši
    lietojamas, ka jebkura cita vertiba.
  • Pielietojumi AI sfera.
  • LISP Lots of Silly Parentheses
  • Common Lisp populara LISP vide
  • SCHEME vienkaršaka implementacija, apskatisim
    nakamaja lekcija.

6
Valoda ML ievads
  • Valodai ML - interaktiva, interpretativa vide.
  • Piemeri New Jersey SML vide
  • - 3 5val it 8 int - ML sistema ka
    atbildi uz lietotaja ievadu pazino definetas
    vertibas tipu. - Izteiksmes tipu ML sistema
    cenšas noteikt automatiski - Stingra tipu
    sistema katrai vertibai, katrai izteiksmei savs
    tips. - Iebuvetie tipi int, real, bool, unit,
    string, char
  • - val x3.56.0 val vertibas deklaracija
    val x 21.0 real
  • - val y xx Definetu vertibu var izmantot
    jaunas definicijasval y 441.0 real
  • - fun sq n nn fun funkcijas
    deklaracija val sq fn int -gt int
  • Funkcijas tips sastav no argumenta un rezultata
    tipiem, ievietojam simbolu -gt.
  • val sq fn norade, ka defineta vertiba ir
    funkcija.
  • Funkciju pec tas deklaracijas var izmantot
    izteiksmes pielietot argumentiem
  • - sq 5 val it 25 int

7
Valoda ML ievads (2)
  • - fun sq n nn fun funkcijas
    deklaracija val sq fn int -gt int
  • - sq 5 val it 25 int
  • fun sq n nn Tips ir neviennozimigs, SML NJ
    vide to uztvera ka fn int -gt int, citas ML
    vides var zinot par kludu.
  • Iemesls , tapat ka ir parslogotas
    (overloaded) funkcijas, kas pielietojamas gan
    int, gan ari real tipa vertibam.
  • ML vide nevar pec dotas izteiksmes un taja
    ieejošajiem operatoriem tipu noteikt
    viennozimigi.
  • - fun sqq x x x real Konkreti specificets
    argumenta tipsval sqq fn real -gt real
  • - fun sqz x real x x Cits variants, ka
    specificet argumenta tipu. val sqz fn real
    -gt real
  • Lai ML sistema konstatet (izvest) izteiksmes
    tipu, vinai par to var signalizet dažados
    veidos.

8
Valoda ML ievads (3)
  • - sq 5 val it 25 int
  • - sqq 5.0 val it 25.0 real
  • - sqq 5 ( tycon mismatch )
  • Stingra tipu sistema nevar izteiksmes int un
    real tipus likt vienu otra vieta.
  • Ja nepieciešams operaciju ar real parametru
    pielietot int tipa argumentam, javeic atklata
    tipu konversija
  • - sqq (real 5)val it 25.0 real
  • - fun s x x 1 Iespejams ekvivalents
    pieraksts
  • - val s fn x gt x 1 val s fn int -gt
    int
  • Cits veids, ka definet funkciju, atbilst ?-termam
    ?x.x1
  • Funkcija ari vertiba, funkciju var pierakstit
    ari val notacija (s funkcija). fun ipaša
    notacija, atvieglo funkciju uzdošanu.
  • - s 43 val it 44 int

9
Valoda ML izteiksmes
  • Izteiksmes valoda ML operacijas un precedence
    1) (unarais -), not 2) , /, div, mod 3) ,
    - 4) , lt, gt, ltgt, lt, gt 5) andalso, orelse -
    aprekina vispirms kreiso pusi, tad, ja
    nepieciešams, rekina ari labo (saisinata
    aprekinašana)
  • - 14 div 3 val it 4 int Veselo skaitlu
    dališana
  • - 14 mod 3 val it 2 int Atlikums dališana
  • - 14.0 / 3.0 val it 4.66666666667 real
  • - (14.0 / 3.0) 3.0 val it 14.0 real
  • - 2 2 5 val it false bool
  • - 3 2 andalso 2 div 0 5 val it false
    bool
  • - 2 div 0 5 andalso 3 2 divide by zero
  • - fun abs x if x gt 0 then x else x val
    abs fn int -gt int
  • if operatora piemers valodas ML izteiksmes
    ietvaros

10
Valoda ML tipi char, string, unit
  • Tips char char tipa konstantes a
  • Funkcijas ord char -gt int, chr int -gt char,
    str char -gt string size string -gt int,
    explode string -gt char list, implode,
  • - fun hello "hello" val hello fn
    unit -gt string
  • unit - tukšais (viena elementa) tips, satur tikai
    (), atbilst C tipam void. Valoda ML katra tipa
    jabut vismaz vienam elementam.
  • - hello val it fn unit -gt string
  • - hello () val it hello string
  • Funkcijas pielietošana unit tipa argumentam.
  • - "Hello " "world!" Simbolu virknu
    konkatenacijaval it "Hello world!" string

11
Valoda ML lokalie mainigie funkcijas
Lokalas deklaracijasfun area(a,b,c) let val
p(abc)/2.0 in Math.sqrt(p(p-a)(p-b)(p-c))
end val area fn real real real -gt
real area(3.0,4.0,5.0)val it 6.0 real --
taisnlenka trijsturis piemera Trisstura laukuma
aprekinašanas formula, lokala deklaracija saisina
izteiksmes pierakstu, var uzlabot
lasamibu. Mainiga (simbola) p vertiba izteiksmes
aprekinašanas gaita tiek aprekinata tikai
vienreiz. Iespejams let izteiksmes definet ari
vairakus mainigos let val x 3 val y x x in
x y endval it 27 int val x 4val x 4
int let val x 3 and y x x in x y endval
it 48 int Lokalas vertibas deklaracijas, kas
atdalitas ar and tiek aprekinatas visas reize,
izmantojot tas mainigo vertibas, kas bija speka
let komandas izpildes sakuma bridi.
12
Valoda ML bibliotekas un i/o
Lokalas deklaracijasfun area(a,b,c) let val
p(abc)/2.0 in Math.sqrt(p(p-a)(p-b)(p-c))
end Biblioteku atveršana- open Math atver
Math biblioteku, var rakstit vienkarši sqrt ML
vides atbilde uzskaitit biblioteka Math
pieejamos datu tipus, ka ari pieejamo vertibu un
funkciju tipus. Biblioteka define strukturu (ML
jedziens bibliotekas vienuma apzimešanai) ML
sistema piedavatas bibliotekas Bool, Byte,
Char, Int, Real, String, StringCvt, Word,
u.c. Failu apstrades biblioteka TextIO, piedava
funkcijas inputLine un output open
TextIO output(stdOut, inputLine(stdIn)) Tipu
konversija Int.toString int -gt string,
Int.fromString string -gt int option(sk. datu
tipus datatype a myoption NONE SOME of a
) Analogiski Bool tipam.
13
Valoda ML praktiski ieteikumi
Darbs ar arejiem programmu tekstiem- use
area.sml Definiciju ielasišana-
OS.FileSys.getDir () Aktivas direktorijas
nosaukums- OS.FileSys.chDir () Fails
chdir.sml (piemeram) fun chdir s
OS.FileSys.chDir(OS.FileSys.getDir() "\\"
s)fun cdsml () OS.FileSys.chDir "C\\smlfun
cdbin () OS.FileSys.chDir "C\\sml\\binfun
dname () OS.FileSys.getDir () Piezime var
izpildit ari komandu open OS.Filesys Termu
izdrukas dzilums Compiler.Control.Print.printD
epth 100 Termu izdrukas garums
Compiler.Control.Print.printLength
1000 Kompilatora parametri open
Compiler.Control.Print
14
Valoda ML realie skaitli
gt 1 1val it true bool gt 2.1
2.1Error operator and operand dont agree
equality type required Valoda ML vienadiba nav
defineta realiem skaitliem un funkcijam. Valoda
HASKELL šis jautajums atrisinats. gt Open Real gt
2.1 lt 2.1 val it false bool gt 2.1 lt 2.11
val it true bool Pieejamas funkcijas
floor, ceil, trunc, round, toString, u.c. Skatit
ari biblioteku IEEEReal.
15
ML rekursija, un šabloni
  • Faktoriala aprekinašanas funkcija
  • fun fac n if n0 then 1 else n
    fac(n-1)val fac fn int -gt int
  • Rekursivs izsaukums, fac n aprekinašanai izsauc
    fac ar argumenta vertibu n-1.
  • Alternativs funkcijas definicijas variants,
    izmanto šablonu atbilstibu
  • fun fac1 0 1 fac1 n n fac1(n-1) val
    fac1 fn int -gt int
  • Šabloni var parklaties (neatkarigi no
    prezentacijas veida), izpildes laika panems
    pirmo, kas atbilst.
  • Ja šablons nepilnigs - bridinajums funkcijas
    definešanas laika, ja izsaukums ar nedefinetu
    vertibu programma apstajas ar kludas situaciju.
  • fun gcd x y if x y then x else if xgty then
    gcd(x-y,y) else gcd(x,y-x)val gcd fn int -gt
    int -gt int

16
ML iznemuma situacijas
  • fun fac n if n0 then 1 else n
    fac(n-1)
  • fun fac1 0 1 fac1 n n fac1(n-1)
  • fac 6val it 720 int
  • fac 13( overflow )
  • fac 1ieciklošanas
  • exception facE Lietotaja defineta iznemuma
    situacija
  • fun fac2 n if n lt 0 then raise facE
  • else if n 0 then 1 else n fac2(n-1)
  • fun fac3 n if n lt 0 then raise facE
  • else (case n of 0 gt 1 n gt n fac3(n-1))
  • Ilustreta ari case notacija izteiksmju veidošana.

17
ML pari, korteži, polimorfisms
  • (3,5) int int
  • (3, true) int bool
  • - fun divide(i, j) (i div j, i mod j) gt val
    divide fn (int int) -gt (int int)
  • - fun max(x,y) int if x lt y then y else x gt
    val max fn (intint)-gtint
  • - fun fst(x,y) x gt val fst fn (a b)
    -gt a
  • - fun snd(x,y) y gt val snd fn (a b)
    -gt b
  • a, b - tipu mainigie, parus var veidot no
    dažadu tipu objektiem, funkcijas fst un snd var
    pielietot visiem pariem
  • Viens un tas pats mainigais viena tipu izteiksme
    visas vietas apzime vienu un to pašu tipu.
  • (1,3,5) int int int Kortežs garuma 3,
    funkciju fst pielietot nevar- fst (1,3,5)
    failure (tycon )

18
Vairaku argumentu funkcijas
  • 2 iespejas, ka definet skaitlu saskaitišanu
  • - fun plus(a,b)int a b gt val plus fn
    int int -gt int
  • - fun add a b a b int gt val add fn int
    -gt int -gt int
  • Funkcijai plus vienmer vajag uzreiz abus
    argumentus (vienu argumentu, kas ir abu skaitlu
    paris)
  • Funkcija add var argumentus apstradat secigi,
    vienu pec otra, šis ir parastais variants
  • int -gt int -gt int nozime int -gt (int -gt int)
  • Funkcija, kas veselam skaitlim piekarto int -gt
    int funkciju
  • - val succ add 1 funkciju add pielietojam
    tikai vienam argumentam gt val succ fn int
    -gt int
  • - succ 6 gt val it 7int

19
Augstakas kartas funkcijas
  • Funkcija, kuras viens no argumentiem ir funkcija
  • - fun compose2 f x f(f x)
  • gt val compose2 fn (a -gt a) -gt a -gt a
  • - fun sq x x x int
  • gt val sq fn int -gt int
  • Funkcijai compose2 pirmais arguments ir funkcija
    ar tipu (a -gt a)
  • Funkcija compose2 pielietota tikai vienam
    argumentam - funkcijai sq
  • - val power4 compose2 sq
  • gt val power4 fn int -gt int
  • Funkcija compose2 funkcija ar 2 argumentiem.
    Iespejams to pielietot vienam argumentam,
    rezultats funkcija, kas gatava pienemt otru
    argumentu.
  • compose2 sq aprekinašanas rezultata ieguto
    funkciju power4 var pielietot talak
  • - power4 3
  • gt val it 81 int

20
Vairaku argumentu funkcijas papildmaterials
  • - fun plus(a,b)int a b gt val plus fn
    int int -gt int
  • - fun add a b a b int gt val add fn int
    -gt int -gt int
  • Funkcijai plus vienmer vajag uzreiz abus
    argumentus, bet funkcija add var argumentus
    apstradat secigi, vienu pec otra.
  • Ja funkcija add pielietota vienam argumentam,
    rezultats joprojam funkcija, kas gatava pienemt
    otru argumentu.
  • Curry - Howard izomorfisms (abi veidi ir
    vienlidz iespejami)
  • - fun curry f x y f (x,y)
  • gt val curry fn (a b -gt c) -gt (a -gt b
    -gt c)
  • - fun uncurry f (x,y) f x y
  • gt val uncurry fn (a -gt b -gt c) -gt (a b
    -gt c)
  • - val add curry plus Šada ir alternativa
    iespejama definicija funkcijai add.
  • Piezime tipu informaciju ML vide bija spejiga
    generet automatiski.

21
Saraksti valoda ML
  • - nil sinonims ar - , tukšais sarakstsgt
    val it a list
  • - 3 saraksta konstruktors elementa
    pievienošana sarakstamgt val it 3 int list
  • - 5 3 vel viena elementa pievienošanagt
    val it 5,3 int list rezultats izteikts
    saraksta saisinataja forma
  • - val x 11 5,3
  • gt val x 11,5,3 int list
  • - fun len nil 0 len (a s) len s
    1 Funkcijas definicija, izmantojot šablonu
    atbilstibugt val len fn a list -gt int
  • - fun len nil 0 Var definet ari šadi len
    (_ s) len s 1 _ vieta var but jebkads
    elements gt val len fn a list -gt int
  • - fun sumlist nil 0 sumlist (a s) a
    sumlist sgt val sumlist fn int list -gt int

22
Saraksti valoda ML turpinats
  • Sarakstu apstrade var tikt izmantotas funkcijas
    hd un tl, kas pec dota saraksta atdod attiecigi
    saraksta pirmo elementu un visu parejo sarakstu
    bez pirma elementa. Varam definet
  • fun hd (a_)a gt val hd fn a list -gt a
  • Sistema izdos ari bridinajumu Match not
    exhaustive
  • Izpildes laika, ja meginas izpildit hd
    izpildes laika kluda
  • Labaka definicija izmantot iznemuma situacijas
  • - exception hd and tl gt exception hd gt
    exception tl
  • - fun hd nil raise hd hd (a_)a gt val hd
    fn a list -gt a
  • - fun tl nil raise tl tl (_s)s gt val tl
    fn a list -gt a list
  • gt hd nil ( Failure hd )

23
Saraksti valoda ML append un reverse
  • fun append nil l l append (ht) l h
    (append t l)
  • append 1,2,3 4,5 -gt 1 append 2,3 4,5
    -gt1 (2 append 3 4,5) -gt1 (2 (3
    append 4,5) -gt1 (2 (3 4,5) ?
    1,2,3,4,5
  • fun reverse nil nil reverse (ht) append
    (reverse t) h
  • reverse 1,2,3,4 -gtappend (reverse 2,3,4) 1
    -gtappend (append (reverse 3,4) 2) 1
    -gtappend (append (append (reverse 4) 3) 2)
    1 -gtappend (append (append (append (reverse
    )4)3)2) 1 -gtappend (append (append
    (append 4) 3) 2) 1 -gtappend (append
    (append 4 3) 2) 1 -gt -gtappend (append
    4,3 2) 1 -gt -gt append 4,3,2 1 -gt
    -gt 4,3,2,1 Kvadratiska sarežgitiba
  • fun rev2 (nil,acc) (nil,acc) rev2
    ((ht),acc) rev2 (t,(hacc)) Labaks!
  • fun rev1 x snd(rev2(x,nil)) Darbojas
    lineara laika

24
Saraksti valoda ML talaki piemeri
  • fun listgen 0 0 listgen n n listgen
    (n-1) Testa piemeru iegušana
  • fun map f nil nil map f (ht) (f h)
    (map f t)
  • map funkcija pielieto argumenta funkciju f
    katram argumenta saraksta elementam
  • - map sq 1,2,3,4gt val 1,4,9,16 int list
  • fun reduce f nil a a reduce f (ht) a
    reduce f t (f h a)
  • reduce atkartoti izpilda divargumentu funkciju
    f, sakot no vertibas a, pec kartas ar f
    piesaistot visus saraksta elementus.
  • fun add x y x y
  • fun mult x y x y
  • fun addelems xlist reduce add xlist
    0 Funkcijas addelems definicija
  • addelems 1,2,3,4 -gt 10
  • fun multelems xlist reduce mult xlist 1

25
Saraksti valoda ML talaki piemeri (2)
  • fun reduce f nil a a reduce f (ht) a
    reduce f t (f h a)
  • fun add x y x y
  • fun mult x y x y
  • fun addelems xlist reduce add xlist
    0 Funkcijas addelems definicija
  • addelems 1,2,3,4 -gt 10
  • Alternativa funkcijas reduce definicija (cita
    argumentu seciba)
  • fun reduce1 f a nil a reduce1 f a (ht)
    reduce1 f (f h a) t
  • Varam definet funkcijas addelems, multelems ka
    vertibas val addelems reduce1 add 0 val
    multelems reduce1 mult 1

26
Saraksti valoda ML kartošana
  • Kartošana, izmantojot ievietošanu (insertion
    sort)
  • fun insert x nil x
  • insert x (ht) if x lt h then (x(ht))
    else (h(insert x t))
  • fun insert_sort nil nil
  • insert_sort (ht) insert h (insert_sort t)
  • Visa programma izveidota 4 rindinas.
  • Vai C var uzrakstit tik vienkaršu kartošanas
    programmu?
  • Darbojas laika, kas proporcionals n2.

27
Saraksti valoda ML merge sort
  • Kartošana, izmantojot saliešanu (merge sort)
  • fun merge nil x x merge x nil x
  • merge (a al) (b bl)
  • if a lt b then (a (merge al (b bl))) else
    (b (merge (aal) bl))
  • fun split nil (nil, nil) split (h nil)
    (h, nil)
  • split (h (g ls)) let val (a,b) split
    ls in (h a, g b) end
  • fun merge_sort nil nil merge_sort a a
  • merge_sort x let val (e,f) split x val
    a merge_sort e val b merge_sort f in merge a
    b end
  • Ieverojam šablonu atbilstibas izmantošanu
    lokalajas deklaracijas let izteiksmes funkciju
    split un merge_sort definicija.
  • Darbojas laika n log n.
  • Testa piemeri merge_sort (listgenx 10000),
    insert_sort (listgenx 10000)
  • fun x_next n (n 17) mod 1000
  • fun listgenx 0 0 listgenx n let val a
    listgenx (n-1) in (x_next (hd a)) a end

28
Konstruktivie (induktivie) datu tipi
  • datatype color red green blue yellow
  • fun rotate red green rotate green blue
    rotate blue yellow rotate yellow red
  • datatype btree leaf of int i_vertex of btree
    int btree
  • fun listel (leaf (x)) x
  • listel (i_vertex (t1,a,t2)) (listel t1) _at_ (a
    (listel t2))
  • val t_1 i_vertex(i_vertex(leaf(3),4,leaf(5)),17,
    leaf(13))
  • val t_2 i_vertex(t_1,15,t_1)
  • listel t_1 ( 3,4,5,17,13 )
  • listel t_2 ( ??? )
  • datatype btl ll of int list ii of btl btl
    int list
  • fun conlists ???
  • fun count11 ???

29
Konstruktivie (induktivie) datu tipi (turpinats)
  • Binarais koks ar 0, 1 vai 2 berniem, katra lapa
    vai iekšeja virsotne pa 2 vardiem
  • datatype b_s l_s of string string v1_s
    of b_s string string v2_s of b_s b_s
    string string
  • Ja vardi tikai lapas (analogiski ari ar citiem
    objektiem)
  • datatype b_sl ll_s of string string
    vv1_s of b_sl vv2_s of b_sl b_sl
  • Binars koks, kas var but ari tukšs
  • datatype bb_t empty node of bb_t bb_t
    int
  • val my_tree node (node (empty, node (empty,
    empty, 3), 11), node (empty, empty,7), 13)

30
Valodas IMP interpretators izteiksmes
  • (fun fst(x,y) x fun snd(x,y) y)
  • datatype aexp acon of int var of string
    plus of aexp aexp minus of aexp aexp
    times of aexp aexp
  • datatype bexp bcon of bool eq of aexp aexp
    ge of aexp aexp not_b of bexp and_b of
    bexp bexp or_b of bexp bexp
  • fun aval (acon(x)) s x aval (var(v)) s s v
    aval (plus(a, b)) s (aval a s) (aval b s)
    aval (minus(a, b)) s (aval a s) - (aval b s)
    aval (times(a, b)) s (aval a s) (aval b s)
  • fun bval (bcon x) s x bval (eq (a,b)) s
    (aval a s aval b s ) bval (ge (a,b)) s
    (aval a s gt aval b s ) bval (not_b(b)) s not
    ( bval b s ) bval (and_b(b1,b2)) s (bval b1
    s) andalso (bval b2 s) bval (or_b(b1,b2)) s
    (bval b1 s) orelse (bval b2 s)

31
Valodas IMP interpretators
  • datatype com skip assign of string aexp
    seq of comcom if_c of bexp com com
    while_c of bexp com
  • fun do_assign x a s y if xy then (aval a s)
    else (s y)
  • gt val do_assign fn string -gt aexp -gt
    (string -gt int) -gt (string -gt int)
  • fun eval (skip) s s eval (assign(x,a)) s
    do_assign x a s eval (seq(c1,c2)) s eval c2
    (eval c1 s) eval (if_c(b,c1,c2)) s if (bval b
    s) then (eval c1 s) else (eval c2 s)
    eval (while_c(b,c)) s if (bval b s) then
    (eval (while_c(b,c)) (eval c s)) else s
  • gt val eval fn com -gt (string -gt int) -gt
    (string -gt int)
  • Ka nokodet piemeros string -gt int ?

32
Valodas IMP interpretators prezentacija
  • fun mk_state nil x 0
  • mk_state ((v,val)t) x if vx then val else
    mk_state t x
  • gt val mk_state fn ('a int) list -gt 'a -gt
    int
  • val sigma mk_state ("x",14),("y",21)gt val
    sigma fn string -gt int
  • fun show_value s x (x,s(x))
  • fun show_state s l map (show_value s) l
  • show_value sigma "x"gt val it ("x",14) string
    int
  • show_state sigma "x","y","z"gt val it
    ("x",14),("y",21),("z",0) (string int) list
  • fun run c s show_state (eval c (mk_state s))
    (map fst s)
  • gt val run fn com -gt (string int) list -gt
    (string int) list
  • eval analogs, darbojas uz stavokliem ka paru
    (mainigais, vertiba) sarakstiem

33
Valodas IMP interpretators rezultati
  • fun run c l show_state (eval c (mk_state l))
    (map fst l)
  • gt val run fn com -gt (string int) list -gt
    (string int) list
  • val gcd_program let val ax var("x") val ay
    var("y")
  • val b1 not_b(eq(ax,ay)) val b2 ge(ax,ay)
  • val c1 assign("x",minus(ax,ay))
  • val c2 assign("y",minus(ay,ax))
  • val c3 if_c(b2,c1,c2) in while_c(b1,c3) end
  • gt val gcd_program com
  • run gcd_program ("x",14),("y",35)
  • gt val it ("x",7),("y",7) (string int)
    list

34
Operatori valoda ML
  • Funkcijas valoda ML var nemt argumentus pec
    kartas, var prasit visus argumentus reize.
  • (funkcijas, kas prasa visus argumentus pec reize
    var tikt uzskatitas par viena argumenta
    funkcijam).
  • Operatori infiksa notacija atteloti simboli,
    apzime funkcijas, kas prasa visus argumentus
    reize.
  • Operatoru piemeri
  • gt op val it fn int int -gt int
  • gt op val it a a list -gt a list
  • gt op _at_ Sarakstu konkatenacija. val it a
    list a list -gt a list
  • Pastav ari iespejas lietotajam definet jaunus
    operatorus.
Write a Comment
User Comments (0)
About PowerShow.com