lập trình hàm - ts.phan duy khánh

Upload: doanthienminh10832925

Post on 07-Apr-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    1/227

    TTSS.. PPHHAANN HHUUYY KKHHNNHH

    LLpp ttrrnnhh hhmm

    NH XUT BN KHOA HC V K THUT

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    2/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    3/227

    i

    Mc lc

    CHNG I. NGUYN L LP TRNH HM .........................................................1

    I.1 Mu v ngn nglp trnh ...............................................................1I.1.1. Vi nt v lch s...................................................................................... 1I.1.2. nh ngha mt ngn ng lp trnh ...........................................................2I.1.3. Khi nim v chng trnh dch................................................................4I.1.4. Phn loi cc ngn ng lp trnh............................................................... 5I.1.5. Ngn ng lp trnh mnh lnh .................................................................. 7

    I.2 Csca cc ngn nghm ................................................................. 8

    I.2.1. Tnh khai bo ca cc ngn ng hm........................................................8I.2.2. nh ngha hm...................................................................................... 11I.2.3. Danh sch............................................................................................... 13I.2.4. Php so khp..........................................................................................16I.2.5. Phng php currying (tham i ho tng phn) .................................... 17I.2.6. Khi nim v bc ca hm...................................................................... 18I.2.7. Kiu v tnh a kiu................................................................................ 20I.2.8. Tnh hm theo kiu khn ngoan.............................................................. 22I.2.9. Mt s v d ........................................................................................... 25

    1. Loi b nhng phn ttrng nhau ......................................................... 252. Sp xp nhanh quicksort......................................................................... 253. Bi ton tm qun hu............................................................................ 264. Bi ton hamming .................................................................................. 27

    I.3 Kt lun ................................................................................................ 29

    CHNG II. NGN NGSCHEME..................................................................... 33

    II.1 Gii thiu Scheme................................................................................. 33II.2 Cc kiu dliu ca Scheme................................................................34

    II.2.1. Cc kiu d liu n gin ....................................................................... 34II.2.1.1. Kiu s ................................................................................................... 34II.2.1.2. Kiu lgch v v t ................................................................................ 36II.2.1.3. K hiu................................................................................................... 38

    II.2.2. Khi nim v cc biu thc tin t ..........................................................39II.2.3. S-biu thc ............................................................................................. 41

    II.3 Cc nh ngha trong Scheme.............................................................. 41II.3.1. nh ngha bin...................................................................................... 41II.3.2. nh ngha hm...................................................................................... 42

    II.3.2.1. Khi nim hm trong Scheme................................................................. 42II.3.2.2. Gi hm sau khi nh ngha .................................................................... 43II.3.2.3. S dng cc hm b tr.......................................................................... 44II.3.2.4. Tnh khng nh kiu ca Scheme ..........................................................45

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    4/227

    ii LP TRNH HM

    II.3.3. Cu trc iu khin................................................................................. 45II.3.3.1. Dng iu kin if .................................................................................... 45II.3.3.2. Bin cc b............................................................................................. 47

    1. nh ngha bin cc b nhdng let ...................................................... 472. Phm vi tng ca dng let ................................................................. 483. Lin kt bin theo dy : dng let* ...........................................................48

    II.3.3.3. nh ngha cc v t................................................................................ 49II.3.4. S quy v s lp....................................................................... 50II.3.4.1. S quy........................................................................................... 50II.3.4.2. V d ...................................................................................................... 51

    1. Tnh tng bnh phng cc st1 n n ................................................ 512. Tnh giai tha......................................................................................... 513. Hm fibonacci........................................................................................ 51

    4. Tnh cc h snh thc........................................................................... 52II.3.4.3. Tnh dng ca li gi quy .................................................................. 52II.3.4.4. Chng minh tnh dng............................................................................ 54II.3.4.5. S lp ................................................................................................ 54

    II.3.5. Vo/ra d liu......................................................................................... 561. c vo dliu : read............................................................................ 562. In ra dliu : write v display................................................................ 563. Xy dng vng lp c menu.................................................................... 57

    CHNG III. KIU DLIU PHC HP ...........................................................61

    III.1 Kiu chui.............................................................................................61III.2 Kiu dliu vect................................................................................. 64III.3 Kiu dliu bi ............................................................................... 64

    III.3.1. Khi nim tru tng ho d liu ...........................................................64III.3.2. nh ngha bi................................................................................... 66III.3.3. t bin trn cc bi.......................................................................... 68

    III.3.4. ng dng bi.....................................................................................691. Biu din cc shu t...........................................................................692. Biu din hnh chnht phng ............................................................... 72

    III.4 Kiu dliu danh sch......................................................................... 74III.4.1. Khi nim danh sch .............................................................................. 74III.4.2. ng dng danh sch ............................................................................... 76

    III.4.2.1. Cc php ton cbn cons, list, car v cdr .............................................. 76III.4.2.2. Cc hm x l danh sch ........................................................................ 79

    1. Cc hm length, append v reverse ........................................................79

    2. Cc hm tham chiu danh sch .............................................................. 803. Cc hm chuyn i kiu........................................................................ 81

    4. Cc hm so snh danh sch..................... ............................................... 83III.4.2.3. Dng case x l danh sch...................................................................... 84III.4.2.4. K thut quy x l danh sch phng...................................................86

    1. Tnh tng cc phn tca mt danh sch ............................................... 862. Danh sch cc snguyn t0 n n ....................................................... 863. Nghch o mt danh sch...................................................................... 874. Hm append c hai tham i .................................................................. 875. Loi b cc phn tkhi danh sch........................................................ 876. Bi ton tnh tng con ............................................................................ 88

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    5/227

    MC LC iii

    7. Lp danh sch cc snguyn t.............................................................88III.4.2.5. K thut quy x l danh sch bt k................................................... 89

    1. Lm phng mt danh sch ...................................................................... 892. Tnh tng cc sc mt trong danh sch ................................................ 903. Loi b khi danh sch mt phn tcc mc khc nhau ..................... 904. Nghch o danh sch ............................................................................ 90

    5. So snh bng nhau ................................................................................. 91III.4.3. Biu din danh sch................................................................................ 92III.4.3.1. Biu din danh sch bi kiu bi........................................................ 92III.4.3.2. Danh sch kt hp .................................................................................. 96

    1. Khi nim danh sch kt hp. ................................................................. 962. Sdng danh sch kt hp ..................................................................... 97

    III.4.3.3. Dng quasiquote..................................................................................... 98III.4.4. Mt s v dng dng danh sch ...........................................................99

    1. Tm phn tcui cng ca danh sch..................................................... 992. Lit k cc v tr mt k hiu c trong danh sch................................... 1003. Tm tng con ln nht trong mt vector ................................................ 1004. Bi ton sp xp dy vin bi ba mu..................................................... 1015. Sp xp nhanh quicksort....................................................................... 102

    CHNG IV. K THUT XL HM.............................................................. 107

    IV.1 Sdng hm....................................................................................... 107IV.1.1. Dng tn hm lm tham i.................................................................. 107IV.1.2. p dng hm cho cc phn t ca danh sch ........................................ 110IV.1.3. Kt qu tr v l hm............................................................................ 112

    IV.2 Phep tnh lambda ............................................................................... 113IV.2.1. Gii thiu php tnh lambda.................................................................. 113IV.2.2. Biu din biu thc lambda trong Scheme ............................................ 114IV.2.3. nh ngha hm nhlambda................................................................. 115

    IV.2.4. K thut s dng phi hp lambda ....................................................... 117IV.2.5. nh ngha hm nhtch lu kt qu .................................................... 1201. Tnh tng gi tr ca mt hm p dng cho cc phn tdanh sch....... 1202. Tnh tch gi tr ca mt hm p dng cho cc phn tdanh sch........ 1203. nh ngha li hm append ghp hai danh sch ................................... 1204. nh ngha li hm map cho hm mt bin h........................................ 1205. nh ngha cc hm fold....................................................................... 122

    IV.2.6. Tham i ho tng phn....................................................................... 122IV.2.7. nh ngha quy cc b ..................................................................... 123

    IV.3 Xl trn cc hm ............................................................................. 125IV.3.1. Xy dng cc php lp ......................................................................... 125

    1. Hm append-map................................................................................. 125

    2. Hm map-select.................................................................................... 126

    3. Cc hm every v some ........................................................................ 126

    IV.3.2. Trao i thng ip gia cc hm ......................................................... 127IV.3.3. T hp cc hm.................................................................................... 129IV.3.4. Cc hm c s lng tham i bt k ................................................... 130

    IV.4 Mt s v d ........................................................................................ 132IV.4.1. Phng php xp x lin tip ................................................................ 132IV.4.2. To th tc nh dng........................................................................... 133

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    6/227

    iv LP TRNH HM

    IV.4.3. X l a thc........................................................................................ 134IV.4.3.1.nh ngha a thc ............................................................................... 134IV.4.3.2. Biu din a thc.................................................................................. 134IV.4.3.3. X l a thc........................................................................................ 135

    1. Nhn a thc vi mt hng s.............................................................. 1352. So snh hai a thc .............................................................................. 136

    3. Php cng a thc................................................................................ 1364. Php nhn hai a thc.......................................................................... 137

    IV.4.3.4. Biu din trong mt a thc.................................................................. 137IV.4.3.5.a ra a thc ...................................................................................... 138

    IV.4.4. Thut ton quay lui............................................................................... 139IV.4.4.1. Bi ton tm qun hu .......................................................................... 139IV.4.4.2. Tm kim cc li gii ............................................................................ 140IV.4.4.3. T chc cc li gii .............................................................................. 143

    CHNG V. CU TRC DLIU .................................................................... 147

    V.1 Tp hp............................................................................................... 147

    1. Php hp trn cc tp hp.................................................................... 1482. Php giao trn cc tp hp................................................................... 1493. Php hiu ca hai tp hp .................................................................... 1494. Tm cc tp hp con ca mt tp hp ................................................... 150

    V.2 Ngn xp............................................................................................. 150V.2.1. Kiu d liu tru tng ngn xp ......................................................... 150V.2.2. Xy dng ngn xp............................................................................... 151V.2.3. Xy dng trnh son tho vn bn......................................................... 152V.2.4. Ngn xp t bin ................................................................................ 153V.2.5. Tnh biu thc s hc dng hu t ........................................................ 156

    V.3 Tp ...................................................................................................... 158

    V.3.1. Cu trc d liu tru tng kiu tp ..................................................... 158V.3.2. V d p dng tp ................................................................................. 159V.3.3. Tp t bin ......................................................................................... 160

    V.4 Cy...................................................................................................... 162V.4.1. Cy nh phn ........................................................................................ 163

    V.4.1.1. Kiu tru tng cy nh phn................................................................ 163V.4.1.2. Biu din cy nh phn.......................................................................... 164

    1. Biu din tit kim sdng hai php cons............................................. 1642. Biu din dng y .......................................................................... 1653. Biu din n gin ............................................................................... 165

    V.4.1.3. Mt s v d lp trnh n gin ............................................................. 1661. m slng cc nt c trong mt cy................................................ 1662. Tnh cao ca mt cy....................................................................... 166

    V.4.1.4. Duyt cy nh phn............................................................................... 167V.4.2. Cu trc cy tng qut.......................................................................... 169

    V.4.2.1. Kiu tru tng cy tng qut............................................................... 169V.4.2.2. Biu din cy tng qut ........................................................................ 169

    1. Biu din cy nhmt bi................................................................ 1692. Biu din cy n gin qua cc l ........................................................ 170

    V.4.2.3. Mt s v d v cy tng qut ............................................................... 170

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    7/227

    MC LC v

    1. m slng cc nt trong cy ........................................................... 1702. Tnh cao ca cy.............................................................................. 171

    V.4.2.4. Duyt cy tng qut khng c x l trung t......................................... 171V.4.3. ng dng cy tng qut........................................................................ 172

    V.4.3.1. Xy dng cy c php .......................................................................... 172V.4.3.2. V d : o hm hnh thc..................................................................... 173

    CHNG VI. MI TRNG V CP PHT B NH.................................... 177

    VI.1 Mi trng ......................................................................................... 177VI.1.1. Mt s khi nim.................................................................................. 177VI.1.2. Phm vi ca mt lin kt ...................................................................... 178

    VI.1.2.1. Phm vi tnh ......................................................................................... 178VI.1.2.2. Php ng = biu thc lambda + mi trng......................................... 179VI.1.2.3. Thay i b nhv php ng.............................................................. 180VI.1.2.4. Nhn bit hm ...................................................................................... 181VI.1.2.5. Phm vi ng........................................................................................ 182

    VI.1.3. Thi gian sng ca mt lin kt ............................................................ 184VI.1.4. Mi trng ton cc ............................................................................. 184

    VI.2 Cp pht b nh................................................................................. 185VI.2.1. V d 1 : m phng my tnh b ti ...................................................... 186VI.2.2. V d 2 : bi ton cn i ti khon....................................................... 187

    VI.3 M hnh sdng mi trng............................................................. 189VI.4 Vo/ra dliu..................................................................................... 192

    VI.4.1. Lm vic vi cc tp............................................................................. 192VI.4.2. c d liu trn tp .............................................................................. 193

    1. Cc hm c tp................................................................................... 1932. Tp vn bn.......................................................................................... 195

    VI.4.3. Ghi ln tp............................................................................................ 1961. Cc hm ghi ln tp.............................................................................. 1962. Lnh sao chp tp ................................................................................. 197

    VI.4.4. Giao tip vi h thng .......................................................................... 198PH LC .................................................................................................................. 203TI LIU THAM KHO .......................................................................................... 205

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    8/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    9/227

    7

    LI NI U

    un sch ny trnh by csl thuyt v nhng kthut lp trnh cbn theo phongcch lp trnh hm (Functional Programming). y l kt qu bin son tcc

    gio trnh sau nhiu nm ging dy bc i hc v sau i hc ngnh cng ngh thng tinca tc gi tii hc Nng.

    Cun sch gm su chng c ni dung nhsau :

    Chng 1 gii thiu qu trnh pht trin v phn loi cc ngn nglp trnh, nhngc im cbn ca phong cch l p trnh mnh lnh. Phn chnh ca chngtrnh by nhngnguyn l lp trnh hm sdng ngn ngminh ho Miranda.

    Chng 2 trnh by nhng kin thc mu vngn ngScheme : cc khi nim vcc kiu dliu cs, cch nh ngha hm, biu thc, kthut sdng quy vphp lp.

    Chng 3 trnh by cc kiu d liu phc hp ca Scheme nhchui, vect , danhsch v cch vn dng cc kiu dliu tru tng trong nh ngha hm.

    Chng 4 trnh by nhng kin thc nng cao vkthut lp trnh hm, nh nghahm nhphp tnh lambda, ng dng thut ton quay lui, truyn thng ip...

    Chng 5 trnh by chi tit hn kthut lp trnh nng cao vi Scheme sdng cccu trc dliu : tp hp, ngn xp, hng i, cy v tp.

    Chng 6 trnh by khi nim mi trng, cch tchc v cp pht b nh , cchvo/ra dliu ca Scheme vi thgii bn ngoi.

    Phn ph lc gii thiu vn tt ngn ng lp trnh WinScheme48, hng dn cchci t v sdng phn mm ny.

    Cun sch ny lm ti liu t kho cho sinh vin cc ngnh cng ngh thng tin vnhng bn c mun tm hiu thm v k thut l p trnh cho lnh vc tr tu nhn to,giao tip h thng, xl k hiu, tnh ton hnh thc, cc h thng ho...

    Trong sut qu trnh bin son, tc gi nhn c tcc bn ng nghip nhiung gp bch vmt chuyn mn, nhng ng vin khch l vmt tinh thn, sgip tn tnh vbin tp cun sch c ra i. Do mi xut bn ln u tin, ti liu thamkho ch yu l ting nc ngoi, chc chn rng ni dung ca cun sch vn cn bc lnhiu thiu st, nht l cc thut ngdch ra ting Vit.

    Tc gi xin c by ty lng bitn su sc vmi kin ph bnh ng gp cabn c gn xa.

    Nng, ngy 06/09/2004Tc gi.

    C

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    10/227

    PPHHAANN HHUUYY KKHHNNHH

    LLPPTTRRNNHHHHMM

    FFuunnccttiioonnaall PPrrooggrraammmmiinngg

    p trnh hm l phong cch lp trnh da trn nh ngha hm s dng php tnh lambda(-calculus). Lp trnh hm khng s dng cc lnh gn bin v khng gy ra hiu ng

    ph nh vn gp trong lp trnh mnh lnh. Trong cc ngn ng lp trnh hm, hm (th tc,chng trnh con) ng vai tr trung tm, thay v thc hin lnh, my tnh tnh biu thc. crt nhiu ngn nghmc pht trin v ng dng nhMiranda, Haskell, ML, cc ngn nghLisp : Scheme, Common Lisp...

    Phn u cun sch ny trnh by csl thuyt v nhng khi nim cbn calp trnh hm s dng ngn ng minh ho l Miranda, mt ngn ng thun tu hmdo D. Turner xut 1986. Phn chnh trnh by k thut lp trnh hm trongScheme,mt ngn ng do Guy Lewis Steele Jr. v G. Jay Sussman xut 1975.

    Ngn ng Scheme c tnh s phm cao, gii quyt thch hp cc bi ton ton hc vx l k hiu. Scheme c c php n gin, d hc, d lp trnh. Mt chng trnh Scheme lmt dy cc nh ngha hm gp li nh ngha mt hoc nhiu hm phc tp hn. Schemelm vic theo ch thng dch, tng tc vi ngi sdng.

    Cun sch ny rt thch hp cho sinh vin cc ngnh cng ngh thng tin vnhng bn c mun tm hiu v k thut lp trnh ng dng trong lnh vc tr tunhn to, giao tip ngi-h thng, x l k hiu, tnh ton hnh thc, thit k cch thng ho...

    V TC GI :

    Tt nghip ngnh Ton My tnh nm 1979 ti trng i hc Bch khoa H Ni.T 1979 n nay ging dy ti khoa Cng ngh Thng tin, trngi hc Bch khoa,i hc Nng. Bo v tin s nm 1991 ti Php. Gi chc ch nhim khoaCng ngh Thng tin 1995-2000.

    Hng nghin cu chnh : x l ngn ng, x la ng, l thuyt tnh ton.

    E-mail: [email protected]

    L

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    11/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    12/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    13/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    14/227

    i

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    15/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    16/227

    1

    CHNG I. NGUYN L LP TRNH HM The primary purpose of a programming language

    is to help the programmer in the practice of his art Charle A. Hoare (Hints on programming language design, 1973)

    I.1 M u v ngn ng lp trnhI.1.1.Vi nt v lch sBui ban u

    hng ngn ng l p trnh (programming language) u tin trn my tnh in t lngn ngmy (machine language), t hp ca cc con s h hai, hay h nh phn, haycc bit(vit tt ca binary digit) 0 v 1. Ngn ng my ph thuc hon ton vo kin

    trc phn cng ca my tnh v nhng quy c kht khe ca nh ch to. gii cc biton, ngi lp trnh phi s dng mt tp hp cc lnh iu khin rt scp m mi lnh lmt t hp cc s h hai nn gp rt nhiu kh khn, mt nhc, rt d mc phi sai st, nhngli rt kh sa li.

    T nhng nm 1950, gim nh vic lp trnh, ngi ta a vo k thut chng trnhcon (sub-program hay sub-routine) v xy dng cc th vin chng trnh (library) khicn th gi n hoc dng li nhng on chng trnh vit.

    Ngn ngmy tin gn n ngn ngtnhin

    Cng t nhng nm 1950, ngn ng hp dch, hay hp ng (assembly) hay cng cnc gi l ngn ngbiu tng (symbolic) ra i. Trong hp ng, cc m lnh v a chcc ton hng c thay th bi cc t ting Anh gi nh (mnemonic) nhADD, SUB, MUL,

    DIV, JUMP... tng ng vi cc php ton s hc + - /, php chuyn iu khin, v.v...Do my tnh ch hiu ngn ng my, cc chng trnh vit bng hp ngkhng th chy

    ngay c m phi qua giai on hp dch (assembler) thnh ngn ng my. Tuy nhin, cc

    hp ng vn cn ph thuc vo phn cng v xa l vi ngn ng t nhin (natural language),ngi lp trnh vn cn gp nhiu kh khn khi gii cc bi ton trn my tnh.

    Nm 1957, hng IBM a ra ngn ng FORTRAN (FORmula TRANslator). y l ngnng lp trnh u tin gn gi ngn ng t nhin vi cch din t ton hc. FORTRAN chophp gii quyt nhiu loi bi ton khoa hc, k thut v sau c nhanh chng ng dngrt rng ri cho n ngy nay vi kho tng th vin thut ton rt s v tin dng. Tiptheo l s ra i ca cc ngn ng ALGOL 60 (ALGOrithmic Language) nm 1960, COBOL(Comon Business Oriented Language) nm 1964, Simula nm 1964, v.v...

    N

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    17/227

    2 LP TRNH HM

    Pht trin ca ngn nglp trnh

    Theo s pht trin ca cc th h my tnh, cc ngn ng lp trnh cng khng ngngc ci tin v hon thin cng ngy cng p ng nhu cu ca ngi s dng v gimnh cng vic lp trnh. Rt nhiu ngn ng lp trnh ra i trn nn tng l thuyt tnhton (theory of computation) v hnh thnh hai loi ngn ng : ngn ng bc thp v ngnng bc cao.

    Cc ngn ngbc thp (low-level language), hp ng v ngn ng my, thng ch dng vit cc chng trnh iu khin v kim tra thit b, chng trnh sa li (debugger) haycng c...

    Cc ngn ng lp trnh bc cao (high-level language) l phng tin gip ngi lm tinhc gii quyt cc vn thc t nhng ng thi cng l ni m nhng thnh tu nghincu mi nht ca khoa hc my tnh c a vo. Lnh vc nghin cu pht trin cc ngnng lp trnh va c tnh truyn thng, va c tnh hin i. Ngy nay, vi nhng tin b cakhoa hc cng ngh, ngi ta c th s dng cc cng c hnh thc cho php gim nhcng vic lp trnh t lc phn tch, thit k cho n s dng mt ngn ng lp trnh.

    I.1.2. nh ngha mt ngn ng lp trnhCc ngn ng lp trnh bc cao c xy dng m phng ngn ng t nhin, thng l

    ting Anh (hoc ting Nga nhng nm trc y). nh ngha mt ngn ng lp trnh l nhngha mt vn phm (grammar) sinh ra cc cu ng ca ngn ng. C th hnh dungmt vn phm gm bn thnh phn : b k t, b tvng, c php v ngngha.

    1. B k t(character set)

    Gm mt s hu hn cc k t (hay k hiu) c php dng trong ngn ng. Trong ccmy tnh c nhn, ngi ta thng s dng cc k t ASCII. C th hiu b k t c vai trnh bng ch ci (alphabet) ca mt ngn ng t nhin to ra cc t (word).

    2. B tvng (vocabulary)

    Gm mt tp hp cc t, hay n v tvng (token), c xy dng t b k t. Cc tdng to thnh cu lnh trong mt chng trnh v c phn loi tu theo vai tr chcnng ca chng trong ngn ng. Chng hn chng trnh Pascal sau y :

    programP;

    var, y : integer;begin

    read(x);

    y:=x+2;

    write(y)

    end.

    gm cc n v t vng : T kho (keyword), hay t dnh ring (reserved word) :program, var,integer,begin, end.

    Tn, hay nh danh (identifier) : read, write, P, x, y.

    Hng (constants) : 2

    Php ton (operators) : + , :=

    Du phn cch (delimiters) : :, (, ), ...

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    18/227

    NGUYN L LP TRNH HM 3

    3. C php (syntax)

    C php quy nh cch thc kt hp cc k t thnh t, kt hp cc t thnh cu lnhng (statement hay instruction), kt hp cc cu lnh ng thnh mt chng trnh honchnh v mt vn phm. C th hnh dung cch kt hp ny ging cch t cu trong mtngn ng t nhin. Thng ngi ta dng s c php (syntax diagram) hoc dng chunBackus-Naur (Backus-Naur Form, vit tt BNF), hoc dng chun Backus-Naur m rng

    (EBNF Extended Backus-Naur Form) m t c php ca vn phm.V d I.1.1 : Trong ngn ng Pascal (hoc trong phn ln cc ngn ng lp trnh), tn gi,hay nh danh (identifier) c s c php nh sau :

    Hnh I.1. S c php tn trong ngn ngPascal .

    Trong mt s c php, cc hnh ch nht ln lt phi c thay th bi cc hnhtrn. Qu trnh thay th thc hin th t theo chiu mi tn cho n khi nhn c cu ng.Chng hn c th c s trn nh sau : tn phi bt u bng ch, tip theo c th lch hoc s tu , ch ch c th l mt trong cc ch ci A..Za..z, s ch c th l mt trongcc ch s 0..9. Nh vy, Delta, x1, x2, Read, v.v... l cc tn vit ng, cn 1A, , ,bn knh, v.v... u khng phi l tn v vi phm quy tc c php.

    Vn phm BNF gm mt dy quy tcc. Mi quy tc gm vtri, du nh ngha ::= (cc nh ngha bi) v vphi. V tri l mt k hiu phi c nh ngha, cn v phi l

    mt dy cc k hiu, hoc c tha nhn, hoc c nh ngha t trc , tun theomt quy c no . EBNF dng cc k t quy c nh sau :

    K hiu ngha

    ::=, hoc , hoc = c nh ngha l{ } chui ca 0 hay nhiu mc lit k tu chn (option)[] hoc 0 hoc 1 mc lit k tu chn< > mc lit k phi c thay th| hoc (theo ngha loi tr)

    Cc quy tc BNF nh ngha tn trong ngn ng Pascal :

    ::= { | }

    ::= A | ... | Z | a | ... | z ::= 0 | ... | 9

    V d I.1.2

    Vn phm ca mt ngn ng lp trnh n gin dng EBNF nh sau :

    ::=program*end

    ::= |

    ::= := ;

    tn

    ch

    s

    ch

    ch

    A ... Z a ... z

    s

    0 ... 9

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    19/227

    4 LP TRNH HM

    ::=

    while do + done

    ::=

    | + |

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    20/227

    NGUYN L LP TRNH HM 5

    Nhng ngn ng lp trnh cp cao ch bin dch hay gp l : Fortran, Cobol, C,C++, Pascal, Ada, Basic... ch thng dch hay ch tng tc : Basic,Lisp, Prolog...

    I.1.4. Phn loi cc ngn ng lp trnhCho n nay, c hng trm ngn ng lp trnh c xut nhng trn thc t, ch c

    mt s t ngn ngc s dng rng ri. Ngoi cch phn loi theo bc nh ni trn,ngi ta cn phn loi ngn ng lp trnh theophng thc (paradigm), theo mc quantrng (measure of emphasis), theo thh (generation), v.v...

    Cch phn loi theo bc hay mc (level) l da trn mc tru tng so vi cc yu tphn cng, chng hn nhlnh (instructions) v cp pht b nh(memory allocation).

    Mc Lnh S dng b nh V dThp Lnh my n gin Truy cp v cp pht trc tip Hp ng, Autocode

    CaoBiu thc v iu khintng minh

    Truy cp v cp pht nhcc phpton, chng hn new

    FORTRAN, ALGOL,Pascal, C, Ada

    Rt cao My tru tng Truy cp n v tng cp pht SELT, Prolog,

    MirandaHnh I.2. Ba mc ca ngn nglp trnh.

    Nhng nm gn y, ngn ng lp trnh c pht trin theo phng thc lp trnh (cn c gil phong cch hay kiu lp trnh). Mt phng thc lp trnh c thc hiu l mt tp hp cc tnhnng tru tng (abstract features) c trng cho mt lp ngn ng m c nhiu ngi lp trnhthng xuyn s dng chng. S sau y minh ho s phn cp ca cc phng thc lp trnh :

    Hnh I.3. Phn cp ca cc phng thc lp trnh.

    Sau y l mt s ngn ng lp trnh quen thuc lit k theo phng thc :

    Cc ngn ngmnh lnh (imperative) c Fortran (1957), Cobol (1959), Basic (1965),Pascal (1970), C (1971), Ada (1979)...

    Cc ngn ngnh hng i tng (object-oriented)c Smalltalk (1969), C++

    (1983), Eiffel (1986), Java (1991), C# (2000), ... Cc ngn ng hm (functional) c Lisp (1958), ML (1973), Scheme (1975), Caml

    (1987), Miranda (1982), ... Cc ngn ngda logic (logic-based) ch yu l ngn ng Prolog (1970).

    Ngn ng thao tc csd liu nh SQL (1980)... Cc ngn ng x l song song (parallel) nh Ada, Occam (1982), C-Linda, ...

    Ngoi ra cn c mt s phng thc lp trnh ang c pht trin ng dng nh :

    Th tcHng

    i tngX l

    song song Lgic HmCsd liu

    Mnh lnh

    Phng thc lp trnh

    Khai bo

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    21/227

    6 LP TRNH HM

    Lp trnh phn b(distributed programming). Lp trnh rng buc (constraint programming).

    Lp trnh hng truy cp (access-oriented programming).

    Lp trnh theo lung dliu (dataflow programming), v.v...

    Vic phn loi cc ngn ng lp trnh theo mc quan trng l da trn ci g (what) s

    thao tc c (achieved), hay tnh c (computed), so vi cch thao tc nhthno (how).Mt ngn ng th hin ci g s thao tc c m khng ch ra cch thao tc nh th noc gi l ngn ngnh ngha (definitional) hay khai bo (declarative). Mt ngn ng thhin cch thao tc nh th no m khng ch ra ci g s thao tc c gi l ngn ngthaotc (operational) hay khng khai bo (non-declarative), l cc ngn ng mnh lnh.

    Hnh I.4. Pht trin ca ngn nglp trnh.

    Cc ngn ng lp trnh cng c phn loi theo thh nh sau : Th h 1 : ngn ng my

    Th h 2 : hp ng Th h 3 : ngn ng th tc Th h 4 : ngn ng p dng hay hm

    Th h 5 : ngn ng suy din hay da logic

    Th h 6 : mng n-ron (neural networks)

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    22/227

    NGUYN L LP TRNH HM 7

    Trc khi nghin cu lp cc ngn ng lp trnh hm, ta cn nhc li mt sc imca lp cc ngn ng lp trnh mnh lnh.

    I.1.5. Ngn ng lp trnh mnh lnhTrong cc ngn ng mnh lnh, ngi lp trnh phi tm cch din t c thut ton,

    cho bit lm cch no gii mt bi ton cho. M hnh tnh ton s dng mt tp hp(hu hn) cc trng thi v s thay i trng thi. Mi trng thi phn nh ni dung cc bind liu c khai bo. Trng thi lun b thay i do cc lnh iu khin v cc lnh gngi tr cho cc bin trong chng trnh. Chng trnh bin dch cho php lu gi cc trngthi trong b nhchnh v thanh ghi, ri chuyn cc php ton thay i trng thi thnh cclnh my thc hin.

    Hnh I.5. Quan h gia tn bin, kiu v gi tr trong ngn ngmnh lnh

    Hnh I.5. minh ha cch khai bo d liu trong cc ngn ng mnh lnh v cc mi quanh theo mc. Ngi ta phn bit ba mc nh sau : mc ngn ng lin quan n tn bin, tnkiu d liu v cu trc lu tr ; mc chng trnh dch lin quan n phng php t chcb nhv mc my cho bit cch biu din theo bit v gi tr d liu tng ng. Mi khaibo bin, v dint i, ni kt(bind) tn bin (i) vi mt cu trc c trng bi tn kiu(int) v vi mt gi tr d liu c biu din theo bit nhlnh gn i := 5 (hoc nhmtlnh va khai bo va khi gn int i=5). T hp tn, kiu v gi tr to nn c trngca bin.

    Cc ngn ng mnh lnh c s dng hiu qu trong lp trnh do ngi lp trnh c thtc ng trc tip vo phn cng. Tuy nhin, tnh thc dng mnh lnh lm hn ch tr tuca ngi lp trnh do phi ph thuc vo cu trc vt l ca my tnh. Ngi lp trnh lunc khuynh hng suy nghv nhng v tr lu tr d liu c t tn (nguyn tc a ch

    ho) m ni dung ca chng thng xuyn b thay i. Thc t c rt nhiu bi ton cn stru tng ho khi gii quyt (ngha l khng ph thuc vo cu trc vt l ca my tnh),khng nhng i hi tnh thnh tho ca ngi lp trnh, m cn i hi kin thc Ton hctt v kh nng tru tng ho ca h.

    T nhng l do trn m ngi ta tm cch pht trin nhng m hnh tng tc khng phnnh mi quan h vi phn cng ca my tnh, m lm d dng lp trnh. tng ca m hnhl ngi lp trnh cn c t ci g sc tnh ton m khng phi m t cch tnh nh thno. S khc nhau gia nhthno v ci g, cng nh s khc nhau gia cc ngn ng

    Kiu :

    tp hp gi tr

    tp hp php ton

    cu trc lu tr

    bitdu 2

    14 213 22. . . 21 20

    biu din theo bit :

    0 0 0 1. . . 0 1

    ..., 1, 0, 1, ...

    +, , , /, ...

    Mcngn ng

    Mcchng

    trnhdch

    Mcmy

    S5

    Tn kiuinteger

    Tn bin

    i

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    23/227

    8 LP TRNH HM

    mnh lnh v cc ngn ng khai bo, khng phi lun lun r rng. Cc ngn ng khai bothng kh ci t v kh vn hnh hn cc ngn ng mnh lnh. Cc ngn ng mnh lnhthng gn gi ngi lp trnh hn.

    Sau y l mt sc trng ca ngn ng lp trnh mnh lnh :

    S dng nguyn l tinh ch tng bc hay lm mn dn, x l ln lt cc i tngd liu c t tn.

    Khai bo d liu ni kt mt tn bin c khai bo vi mt kiu d liu v mtgi tr. Phm vi hot ng (scope) ca cc bin trong chng trnh c xc nh bicc khai bo, hoc ton cc (global), hoc cc b (local).

    Cc kiu d liu cbn thng dng l s nguyn, s thc, k t v lgic. Cc kiu mic xy dng nh cc kiu cu trc. V d kiu mng, kiu bn ghi, kiu tp hp,kiu lit k,...

    Hai kiu d liu c cng tn th tng ng vi nhau, hai cu trc d liu l tngng nu c cng gi tr v c cng php ton x l.

    Trng thi trong (b nh v thanh ghi) b thay i bi cc lnh gn. Trng thi ngoi(thit b ngoi vi) b thay i bi cc lnh vo-ra. Gi trc tnh t cc biu thc.

    Cc cu trc iu khin l tun t, chn la (r nhnh), lp v gi chng trnh con. Chng trnh con thng c hai dng : dng th tc (procedure) v dng hm

    (function). S khc nhau ch yu l hm lun tr v mt gi tr, cn th tc th khngkhng nht thit tr v gi tr. Vic trao i tham bin (parameter passing) vi chngtrnh con hoc theo tr (by value) v theo tham chiu (by reference).

    S dng chng trnh con thng gy ra hiu ng ph (side effect) do c th lm thayi bin ton cc.

    Mt chng trnh c xy dng theo bn mc : khi (block), chng trinh con, nth(module/packages) v chng trnh.

    I.2 C s ca cc ngn ng hmI.2.1. Tnh khai bo ca cc ngn ng hm

    Trong cc ngn ng mnh lnh, mt chng trnh thng cha ba li gi chng trnhcon (th tc, hm) lin quan n qu trnh a vo d liu, x l d liu v a ra kt qutnh ton nh sau :

    begin

    GetData(...) ; { a vo }ProcessData(...); { x l }

    OutPutResults(...); {xem kt qu }end

    Trong cc ngn ng lp trnh hm, cc li gi chng trnh con c vit thnh biu thcrt n gin :

    (print

    (process-data

    (get-data (...))))

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    24/227

    NGUYN L LP TRNH HM 9

    Cc ngn ng hm l cng cc ngn ng bc cao, mang tnh tru tng hn so vi ccngn ng mnh lnh.

    Nhng ngi lp trnh hm thng trnh s dng cc bin ton cc, trong khi , hu htnhng ngi lp trnh mnh lnh u phi s dng n bin ton cc.

    Khi lp trnh vi cc ngn ng hm, ngi lp trnh phi nh ngha cc hm ton hc d

    suy lun, d

    hiu m khng c

    n quan tm chng

    c ci

    t nh

    th

    no trong my.Nhng ngi theo khuynh hng lp trnh hm cho rng cc lnh trong mt chng trnhvit bng ngn ng mnh lnh lm thay i trng thi ton cc l hon ton bt li. Bi v rtnhiu phn khc nhau ca chng trnh (chng hn cc hm, cc th tc) tc ng khng trctip ln cc bin v do vy lm chng trnh kh hiu. Cc th tc thng c gi s dngcc phn khc nhau ca chng trnh gi nn rt kh xc nh cc bin b thay i nh thno sau li gi. Nh vy, s xut hin hiu ng ph lm cn trvic chng minh tnh ngn (correctness proof), cn tr ti u ha (optimization), v cn trqu trnh song song tng (automatic parrallelization) ca chng trnh.

    Mt ngn ng hm, hay ngn ngp dng (applicative language) da trn vic tnh gitr ca biu thc c xy dng t bn ngoi li gi hm. y, hm l mt hm ton hcthun ty : l mt nh x nhn cc gi tr ly t mt min xc nh (domain) tr v cc gitr thuc mt min khc (range hay co-domain).

    Mt hm c th c, hoc khng c, cc tham i (arguments hay parameters) sau khitnh ton, hm tr v mt gi tr no . Chng hn c th xem biu thc 2 + 3 l hm tnhtng (php +) ca hai tham i l 2 v 3.

    Ta thy rng cc hm khng gy ra hiu ng ph trong trng thi ca chng trnh, nutrng thi ny c duy tr cho cc tham i ca hm. Tnh cht ny ng vai tr rt quantrng trong lp trnh hm. l kt qu ca mt hm khng ph vothi im(when) hmc gi, m chph thuc vocch gi n nhthno i vi cc tham i.

    Trong ngn ng lp trnh mnh lnh, kt qu ca biu thc :

    f(x) + f(x)

    c th khc vi kt qu :

    2 * f(x)

    v li gif(x) u tin c th lm thay ix hoc mt bin no c tip cn bif. Trongngn ng lp trnh hm, c hai biu thc trn lun c cng gi tr.

    Do cc hm khng ph thuc nhiu vo cc bin ton cc, nn vic lp trnh hm s dhiu hn lp trnh mnh lnh. V d gi s mt trnh bin dch cn ti u php tnh :

    f(x) + f(x)

    thnh :

    2 * f(x)

    Khi , trnh bin dch mt ngn ng hm lun lun xem hai kt qu l mt, do c tnhnht qun trong kt qu tr v ca hm. Tuy nhin, mt trnh bin dch ngn ng mnh lnh,ngn ng Ada1 chng hn, th u tin phi chng minh rng kt qu ca li gi th haikhng ph thuc vo cc bin b thay i trong qu trnh thc hin bi li gi th nht.

    1Ada l ngn ng lp trnh bc cao c pht trin nm 1983 bi B Quc phng M (US Department of

    Defense), cn gi l Ada 83, sau c pht trin bi Barnes nm 1994, gi l Ada 9X. Ngn ng Ada ly tnca nh n Ton hc ngi Anh, Ada Augusta Lovelace, con gi ca nh thLord Byron (17881824). Ngita tn vinh b l ngi lp trnh u tin.

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    25/227

    10 LP TRNH HM

    Mt trnh bin dch song song s gp phi vn tng t nu trnh ny mun gi hmtheo kiu gi song song.

    Bn cnh tnh u vit, ta cng cn xem xt nhng bt li vn c ca lp trnh hm :nhc im ca ngn ng hm l thiu cc lnh gn v cc bin ton cc, s kh khn trongvic m t cc cu trc d liu v kh thc hin qu trnh vo/ra d liu.

    Tuy nhin, ta thy rng s

    thiu cc l

    nh gn v cc bi

    n ton c

    c khng

    nh h

    ng haykhng lm kh khn nhiu cho vic lp trnh. Khi cn, lnh gn gi tr cho cc bin c m

    phng bng cch s dng ccu tham bin ca cc hm, ngay c trong cc chng trnh vitbng ngn ng mnh lnh.

    Chng hn ta xt mt hm P s dng mt bin cc bx v tr v mt gi tr c kiu btk no (SomeType). Trong ngn ng mnh lnh, hm P c th lm thay ix bi gncho x mt gi tr mi. Trong mt ngn ng hm, P c th m phng s thay i ny bitruyn gi tr mi cax nh l mt tham i cho mt hm ph trthc hin phn m cn lica P. Chng hn, s thay i gi tr ca bin trong chng trnh P :

    function P(n: integer) > SomeType ;x: integer := n + 7

    beginx := x * 3 + 1

    return 5 * g(x)

    end ;

    ta c th vit li nh sau :

    function P(n : integer) > SomeType ;x: integer := n + 7

    begin

    return Q(3*x + 1) % m phng x := x * 3 + 1end ;

    trong , hm mi Qc nh ngha nh sau :

    function Q(x: integer) > Some Typebegin

    return 5 * g(x)

    end ;

    Ta cng c th s dng k thut ny cho cc bin ton cc. Nh vy, vic m phng lptrnh mnh lnh trong mt ngn ng hm khng phi l cch mong mun, nhng c th lmc.

    Mt vn ni bt trong ngn ng hm l s thay i mt cu trc d liu. Trong ngnng mnh lnh, s thay i mt phn t ca mt mng rt n gin. Trong ngn ng hm,mt mng khng th b thay i. Ngi ta phi sao chp mng, tr ra phn t s b thay i,v thay th gi tr mi cho phn t ny. Cch tip cn ny km hiu qu hn so vi php gn

    cho phn t.Mt vn khc ca lp trnh hm l kh nng hn ch trong giao tip gia h thng

    tng tc vi hiu hnh hoc vi ngi s dng. Tuy nhin hin nay, ngi ta c xuhng tng cng th vin cc hm mu x l hng i tng trn cc giao din ho(GUI-Graphic User Interface). Chng hn cc phin bn thng dch h Lisp nh DrScheme,MITScheme, WinScheme...

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    26/227

    NGUYN L LP TRNH HM 11

    Tm li, ngn ng hm da trn vic tnh gi tr ca biu thc. Cc bin ton cc v phpgn b loi b, gi trc tnh bi mt hm ch ph thuc vo cc tham i. Thng tin trngthi c a ra tng minh, nhcc tham i ca hm v kt qu.

    Sau y ta s xt nhng khi nim c coi l cbn nht trong cc ngn ng hm : hm(function) , danh sch (lists) , kiu (type), tnh a kiu (polymorphism), cc hm bc cao(higherorder functions), tham i ha tng phn (Currying), tnh hm theo kiu khnngoan2(lazy evaluation),phng trnh (equations), so khp (patterm matching).

    Cc hm quy (recursive functions) l mt trong nhng khi nim chnh trong ngn nghm. Cc hm bc cao v phng php tnh hm theo kiu khn ngoan to th mnh cho lptrnh hm v ng vai tr quan trng trong vic xy dng cc chng trnh hm dng n th(modular functional programs). Tnh a kiu b sung tnh mm do cho h thng nh kiu.

    Trc khi tm hiu ngn ng Scheme bt u t chng 2, cun sch s dng ngn ngMiranda trnh by nhng khi nim cbn ca lp trnh hm. Miranda l mt ngn nghm c c php dc, d hiu do David Turner pht trin nm 1986. c im ca Mirandal thun tu hm (purely functional), khng xy ra hiu ng ph. Mt chng trnh Miranda,c gi l mt script, l mt tp hp ccphng trnh (equation) c nh ngha theomt th t tu no (ni chung th t khng quan trng).

    Trnh thng dch Miranda chy ch tng tc trong hiu hnh Unix. Sau y, chngti khng trnh by y c php ca Miranda m ch qua cc v d ca Miranda minhho cc yu tthun tu hm ca lp trnh hm.

    V d sau y la mt chng trnh Miranda n gin. Ch cp k hiu || bt umt dng ch thch ca Miranda.

    z = sq x / sq y || z = sq(x)/sq(y) = x2/y2sq n = n * n || sq(n) = n2x = a + b

    y = a - b

    a = 10

    b = 5

    I.2.2. nh ngha hmHm l khi nim cbn trong cc ngn ng hm. Mt hm c th nhn t khng n

    nhiu tham i vo tnh ton v tr v mt gi tr, gi tr ny ch ph thuc vo cc thami nhn m thi.

    Trong Miranda, mt hm c nh ngha bi hai phn : phn khai bo v phn nhngha hm. Phn khai bo c th vng mt c dng mt nguyn mu hm :

    ::->

    Phn nh ngha hm c dng mt phng trnh, gm v tri v mt s v phi, mi v

    phi c th c mt iu kin ng vai tr lnh gc (guard) phn bit ng cui :[] = [ ]

    V d hm i nhit t Fahrenheit (F) sang Celsius (C) c nh ngha trongMiranda nh sau :

    celsius :: num > num || khai bo kiu hmcelsius f = (f 32)*5/9 || i t Fahrenheit sang Celsius

    2 Trong cun sch c nhiu thut ng ting Vit do tc gi t dch t ting Anh.

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    27/227

    12 LP TRNH HM

    Dng u tin khai bo celsius l mt hm nhn mt i s v tr v mt gi tr s.Dng th hai tnh i nhit . p dng hm celsius nh ngha cho cc i s c th,ta c :

    celsius 68

    --> 20

    celsius (-40)--> -40

    y, k hiu --> dng ch rng gi tr tr v ca hm l nhng g theo sau k hiuny. Chng hn, li gi celsius68 tr v gi tr20.

    Ngn ng Miranda s dng c php ngn gn v khng s dng cc cp du ngoc bao bc cc tham i hoc bao bc cc li gi hm.

    Cc hm quy ng vai tr quan trng trong cc ngn ng hm. Chng hn, xt mt vd c in l tnh c s chung ln nht gcd (greatest common divisor) theo thut tonEuclide :

    gcd a b = gcd (a-b) b, if a > b

    = gcd a (b-a), if a < b= a, if a=b || hoc otherwise

    Hm gcd c nh ngha nhphng trnh c 3 v phi phn bit, mi v phi chamt iu kin (a > b, a < bva=b hay otherwise). Miranda s thc hin gi quycho n khi gp iu kin dng l a=b v cng l kt qu tnh gcd. Ta thy cc lnh gctrong phng trnh thc hin tng t lnh if trong ngn ng mnh lnh.

    Trong cc gio trnh nhp mn Tin hc, ngi ta thng ly v d tnh giai tha ca mts nguyn khng m bng phng php quy. Ta s thy ngn ng Miranda tnh giai thakiu quy nh sau :

    fac :: num > num

    fac n = 1, if n = 0 || fac 0 = 1fac x = x * fac (x - 1), otherwise || li gi quy

    so snh, chng trnh di y ch ra cch tnh n! trong mt ngn ng mnh lnhnhng khng dng quy (ch dng quy khi tht cn thit !).

    function fac (n: integer) : integer ;

    var i, r: integer ; % r cha kt qubegin

    r := 1

    { tnh n * (n - 1) * (n - 2) * ... * 1 : }for i :=n downto 1 do r := r * i;

    return r

    end;Hm fac trn y s dng mt bin trng thi r b thay i gi tr trong vng lp for.

    Cn chng trnh Miranda khng s dng vng lp for, m s dng mt li gi quy. Mili gi quy cho fac tng ng vi mt ln gp ca vng lp for. Do tnh ngn gn cali gi quy trong ngn ng hm, nhiu ngi ng h lp trnh hm quan nim rng phplp trong cc ngn ng mnh lnh l rc ri, lm ngi c kh hiu, kh theo di.

    Sau y l mt v d khc tnh nghim mt phng trnh bc hai ax2+bx+c=0 :

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    28/227

    NGUYN L LP TRNH HM 13

    quadsolve a b c

    = error "complex roots", if delta

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    29/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    30/227

    NGUYN L LP TRNH HM 15

    length L = 0, if L = [] || danh sch rng c di 0

    || danh sch khc rng c t nht mt phn t

    length L = 1 + length (tl L), otherwise

    Tng t, hm concatenate ghp hai danh sch c xy dng nh sau :

    concatenate L1 L2 = L2, if L1 = []

    concatenate L1 L2

    = (hd L1):concatenate (tl L1) L2, otherwise

    Hm concatenatec trng cho kiu lp trnh quy ca cc ngn ng hm. Dngu tin ch cch thot ra khi hm, theo kiu chia tr (divide and conquer). Trong trnghp ghp mt danh sch rng (if L1 = []) vi mt danh sch bt k khc (L2) th tr vkt qu chnh l danh sch ny v qu trnh kt thc.

    Dng th hai l trng hp tng qut v ghp hai danh sch thnh mt danh sch mi sdng php ton cons (otherwise) theo kiu quy. Do danh sch th nht L1[] nnL1 c t nht mt phn t. Khi danh sch mi (l danh sch kt qu) c to ra bi phntu tin ca L1, l (hd L1) ghp vi (php :) mt danh sch cn li. Danh sch cn li

    ny li l kt qu ca bi ton ban u nhng nh hn vi tham i th nht l danh sch cnli ca L1 v tham i th hai l ton bL2. Qu trnh c th tip tc cho n khi danh schcn li rng.

    Ta c th so snh cch xy dng cc danh sch trong cc ngn ng mnh lnh vi ngnng Miranda.

    Trong cc ngn ng mnh lnh, danh sch do ngi lp trnh t xy dng thng theokiu mc ni s dng bin con tr (pointer) v s dng b nh cp pht ng (dynamicallocation). Cc php ton trn danh sch l s thao tc mc thp trn cc con tr. Vic cppht v gii ta b nhcng do ngi s dng t gii quyt. Thng thng, ngi lp trnhc xu hng s dng vic cp nht ph hy (destructive updates) trn cc cu trc d liu.

    V d, ngi lp trnh Ada ghp danh sch bng cch vit mt th tc cho php mc ni

    (hook) hai danh sch vi nhau nhmt php gn con tr, m khng cn xy dng mt danhsch mi (th ba). Tuy nhin tip cn kiu Ada c th gy ra hiu ng ph nu lm thay idanh sch th nht.

    Trong cc ngn ng hm, ngi lp trnh khng h quan tm n cc con tr v vic cppht b nh. Mc du nhng yu t ny l tn ti trong ngn ng hin hnh, nhng chngc che du mt cch hiu qui vi ngi lp trnh to nn mt mc tru tng c licho ngi lp trnh, gip h trnh c nhng sai st khi lp trnh.

    Trong nhng tnh hung nh vy, mt h thng thi gian thc hin RST (Run TimeSystem) qun l b nhlu tr cc phn t ca danh sch. RTS cho php cp pht b nhkhicn thit v tng pht hin nhng khi nhkhng cn cn dng n na gii phngchng.

    Ngn ng Miranda cn c kiu d liu tuple tng t kiu bn ghi ca Pascal. lmt dy phn t khng c cng kiu (danh sch l mt dy phn t c cng kiu tng tkiu mng array) c vit gia mt cp du ngoc. V d :

    employee = ("Kim",True, False , 29)

    Cc phn t kiu tuple khng c th t. Vic truy cp n mt phn t ch c thcthc hin nhphp so khp (pattern matching).

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    31/227

    16 LP TRNH HM

    I.2.4. Php so khpNh thy, mt hm trong Miranda c thc nh ngha bng cch s dng nhiu

    biu thc v phi khc nhau, theo sau l lnh gc, l cc iu kin nhif x>0,otherwise hay while. Tuy nhin, Miranda cho php s dng mt c php tng qut la chn gia cc kh nng da trn cc mu (patterns) dng :

    = , trong , phn l ty chn. Mu c th s dng cc tham bin hnh thc, cchng v mt s cu trc khc. Khi mt hm c gi, li gi hm gm tn hm v cc thami thc s ca n (nu c) sc so khp vi cc mu trong chng trnh. Nu so khpthnh cng, dng lnh tng ng vi mu c thc hin. Nu c nhiu mu c tm thy,mu u tin (theo th t vit cc lnh) sc chn.

    Sau y l mt s v dn gin minh ha cch nh ngha cc hm s dng php sokhp. Hm cond xt c th vit di dng :

    cond true x y = x

    cond false x y = y

    Hm fac c th vit vi hai dng chng trnh :fac 0 = 1

    fac (n+1) = (n+1) * fac n

    Php so khp th nht xy ra nu tham i bng 0. Mu th hai c so ch khi nu thami l ln hn hoc bng 1. Khi gi tr ca nc ly gi tr ca tham i tri 1 mtcch khn ngoan.

    Trng hp tng qut, mt biu thc s xut hin trong mt mu c th c dng V+ C,vi Vl mt bin v Cl mt trc hng (literal constant). Mu s chc so nu Vc thnhn mt gi tr khng m. Hm ackermanc nh ngha nh sau :

    ack 0 n = n+1

    ack (m+1) 0 = ack m 1

    ack (m+1) (n+1) = ack m(ack (m+1) n)

    Hm tnh s fibonacci thn :fib 0 = 0

    fib 1 = 1

    fib (n+2) = fib (n+1) + fib n

    Ch : Cc biu thc s tng qut khng thc ly lm cc mu trnh nhp nhng(ambiguities). V d, mu :

    f (n + m) = n * m

    l nhp nhng v khng ng. Mt li gi hm, f 9 chng hn, s gy ra kt qu hoc 1*8hoc 2*7, hoc mt t hp khc tu .

    Mu cng c th cha danh sch. V d, hm tnh di ca mt danh sch cho trcy c thc vit li di dng nh sau :

    length [] = 0

    length (a : L) = 1 + (length L)

    Mu xut hin trong dng th nht tng ng vi danh sch rng, ch c danh sch rngmi thc so khp c kt qu 0. Dng th hai x l danh sch khc rng. Trong trnghp ny, mt li gi quy c to ra. Bin ac khp vi phn tu tin ca danh

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    32/227

    NGUYN L LP TRNH HM 17

    sch tham i v do ,L l danh sch cn li tr thnh tham i mi ca hm. Kt qu ligi quy gim i 1.

    Mt s hm x l danh sch khc s dng mu so khp : tnh tng, tch v nghch omt danh sch :

    sum [] = 0

    sum (a:L) = a + sum L

    product [] = 1

    product (a:x) = a * product x

    reverse [] = []

    reverse (a:L) = reverse L ++ [a]

    truy cp n mt phn t ca kiu bn ghi (tuple), s dng so khp, chng hn bn ghic hai phn t :

    fst (a, b) = a || truy cp n mt phn t th nht

    snd (a, b) = b || truy cp n mt phn t th hai

    Sau y nh ngha li hai hm th vin ca Miranda : hm take tr v danh sch n

    phn tu tin ca danh sch cho v hm drop tr v phn cn li ca danh sch saukhi loi bn phn tu tin.

    take 0 L = []

    take (n+1) [] = []

    take (n+1) (a:L) = a : take n L

    drop 0 L = L

    drop (n+1) [] = []

    drop (n+1) (a:L) = drop n L

    Ch rng hai hm c nh ngha sao cho ng nht thc sau y tho mn (bao gmc trng hp oi om l di ca L nh thua n) :

    take n L ++ drop n L = L

    I.2.5. Phng php currying (tham i ho tng phn)Mt yu t quan trng khc ca hu ht cc ngn ng hm l phng php currying (ly

    tn nh logic hc Haskell B. CURRY.), hay cn c gi l phng php tham i ho tngphn (partial parametrization).

    Thng thng mt hm c thc hin theo kt hp tri, nu vitf x y (hmftc ngln hai ix y), vit quy c (x, y)f(x, y), th cng c xem nh vit (f x) y, ngha l ktqu ca vic p dngfchox l mt hm p dng choy. Ta vitx (y f(x, y)).

    Mt cch tng qut cho hm n binf(x1, x2,..., xn) :

    x1(x2(x3...(xnf(x1, ...,xn)) ...))Chng hn xt hm multc nh ngha nh sau :

    mult x y = x * y

    Nu hm multc gi vi hai i s, th mult s tnh tch s ca hai i s ny, theongha thng thng. Tuy nhin trong ngn ng Miranda, mult c thc xem nh hmmt tham i (i th nht x), kt qu s l mt hm khc, p dng cho mt tham i (ith hai y).

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    33/227

    18 LP TRNH HM

    Mt cch tng qut, mt hm no c nhiu hn mt tham i c thc tham iha tng phn. Chng hn ta nh ngha hm triple nhn 3 mt s :

    triple x = 3 * x

    Nhng cng c thnh ngha li hm triple theo cch currying :

    triple = mult 3

    Li gi :

    triple 7

    cho kt qu l 21 v dn n li gi mult 3 7.

    I.2.6. Khi nim v bc ca hmTrong phn ln cc ngn ng mnh lnh, cc i tng cs(bin v hng) c x l

    khc vi hm. Chng c thc c vo (t bn phm, t tp...), a ra (mn hnh, my in,tp...), trao i gi tr vi nhau, nhng hm ch c thc gi hoc c kch hot (invoke).

    Cc i tng csc gi l c bc 0, cc hm c cc tham i l nhng i tng c

    sc gi l cc hm bc 1. Mt hm bc n nhn cc tham i bc nh hn n, c ccbiu thc bc cao hn.

    Khi nim v bc c Russel (Russell's Paradox) v Whitehead (Principia Mathematica~1900) xut nhm loi b nhng nghch l(paradox) thng hay gp trong l thuyt tp hpca Cantor, chng hn nghch l v ngi thco (barber paradox), bng cch lm gim tt ccc kh nng xy ra vng lun qun. Trong lgic v t bc mt, ch c th s dng cc lng tp dng cho cc c th (cc bin). Cn trong lgic v t bc hai, ngi ta c th lng t hocc v t...

    Trong cc ngn ng hm, hm lun lun c x l nh nhng i tng c truyntham i tr v kt qu v c lu gi trong cc cu trc d liu. Mt hm nhn mt hmkhc nh l mt tham i c gi l hm bc cao. Cc hm bc cao mang li tnh hiu qu

    v l nn tng (corner-stone) ca lp trnh hm. hiu bn cht ca mt hm bc cao, ngi c c th t tm gi tr kt qu ca

    answer t cc lnh Miranda sau y :

    answer = twice twice twice suc 0

    twice f x = f(f x)

    suc x = x + 1

    Ngn ng Miranda lun xem nhng hm c nhiu hn mt tham i u l cc hm bccao. Chng hn t hm th vin member x L kim tra danh sch L c cha phn txkhng (kt qu l true hoc false), ta c th p dng nh ngha cc hm khc nhaunh sau :

    vowel = member ['a', 'e', 'i', 'o', 'u']digit =

    member ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

    month =

    member [ "Jan", "Feb", "Mar", "Apr", "Jun", "Jul", "Aug",

    "Sep", "Oct", "Nov", "Dec" ]

    Cc ngn ng hm u c php ton bao qua phi (foldr right) dng tnh ton trncc phn t ca mt danh sch. Miranda c hm foldrc nh ngha nh sau :

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    34/227

    NGUYN L LP TRNH HM 19

    foldr op k [] = k

    foldr op k (a:L) = op a (foldr op k L)

    Li gi hm foldr :

    foldr (+) 0 [2, 4, 7]

    tng ng vi :

    (2 + (4 + (7 + 0)))

    --> 13

    Ch cc php ton trung t trong ngn ng Miranda, nh php cng + trn y, cxem l tham i v phi c t trong mt cp du ngoc.

    Ta c thnh ngha cc hm x l danh sch s dng hm foldr. Chng hn hm tnhtng tt c cc phn t ca mt danh sch theo kiu currying nh sau :

    sumlist = foldr (+) 0

    Hm sumlist c mt tham i l danh sch s cung cp ba tham i cho hm foldrnhng kt qu l do hm op c mt tham i tr v.

    sumlist [2, 9, 52]

    --> foldr (+) 0 [2, 9, 52]

    --> 63

    Mt cch tng t ta nh ngha hm tnh tch ca tt c cc phn t trong mt danhsch :

    product = foldr (*) 1

    Hm :

    and = foldr (&) true

    gi php v lgch cho tt c cc phn t ca mt danh sch. Kt qu php gi hm and

    L l true nu mi phn t ca danh sch Lu l true, kt qu l false nu ngc li.Hm nghch o mt danh sch :

    reverse = foldr postfix []

    where postfix a L = L ++ [a]

    Cc ngn ng hm c nhiu hm bc cao tin nh, v ngi lp trnh cng c th tnhngha nhng hm bc cao mnh v tng qut nh hm foldr va xt.

    Mt hm bc cao quan trng khc l map f L vi f l mt hm v L l mt danh sch.Hm map tr v kt qu l mt danh sch mi gm cc phn t ca L c p dng chohm f. V d :

    map triple [1, 2, 3, 4]

    --> [triple 1, triple 2, triple 3, triple 4]

    --> [3, 6, 9, 12]

    Hm map gi triple cho tt c cc phn t ca danh sch [1, 2, 3, 4], tr vdanh sch cc s nguyn c nhn ba l [3, 6, 9, 12].

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    35/227

    20 LP TRNH HM

    I.2.7. Kiu v tnh a kiuCc ngn ng hm c mt h thng kiu d liu hon ton khc vi cc ngn ng mnh

    lnh. Trong cc ngn ng mnh lnh (nh Pascal, C, Ada..), tnh nh kiu tnh cht ch(static strong typing) bt buc ngi lp trnh phi m t kiu cho mi bin dng n. Sau khikhai bo, ngi s dng khng c thay i kiu d liu ca bin trong khi chy chng

    trnh.Cc ngn ng hm thng khng s dng nh kiu. Tuy nhin mt s ngn ng hm li

    s dng nh kiu ng (dymamic typing) hoc nh kiun cht ch(implicit strong typing)(thng gp trong ngn ng Fortran).

    Nh vy, cc ngn ng hm to ra c tnh mm do vcc hm a kiu (polymorphicfunctions) vi li gi c cc tham i c cc kiu d liu khc nhau.

    Miranda s dng ch nh kiu tnh cht ch tng minh (implicit static strongtyping). Mi bin mi biu thc u c mt kiu c xc nh tnh. C ba kiu tin nhtrong Miranda l num, bool v char. Kiu num khng phn bit s nguyn hay s thc.Kiu bool c hai gi tr hng l true v false. Kiu char gm cc k t ASCII. Mthng k tc t gia cp du nhy n v s dng quy c tng t ngn ng C, nhx, &, \n, v.v...

    Nu T l mt kiu, th [T] l mt kiu danh sch gm cc phn t kiu T. V d danhsch sau y :

    [[1, 2], [2, 3], [4, 5]]

    c kiu [[num]] v y l mt danh sch gm cc phn t l danh sch cc s. Mt hngchui c dng [ char ], chng hn chui bonjour c vit trong Miranda [b,o, n, j, o, u, r].

    Nu T1, ..., Tn l cc kiu no , n>0, th (T1, ..., Tn) l mt kiu bn ghi, hay bnphn t bt k. V d b 3 (true, Honda, 7331) c kiu (bool, [char], num).

    Nu T1 v T2 l hai kiu no , th T1->T2 l mt kiu hm vi tham i c kiu T1v gi tr tr v c kiu T2. V d hm triple va nh ngha trn y c kiu :

    num > num

    Ch php > c kt hp phi (right associative).

    Ngi lp trnh c th s dng cc khai bo nh ngha hm. V d, hm multc khaibo kiu currying nh sau :

    mult :: num > (num > num)

    C ngha rng multc xem l hm c mt tham i tr v mt hm khc c kiu :

    num > num.

    Du :: trong khai bo hm c c c kiu l (is of type). V d :sq :: num -> num

    sq n = n * n

    Tuy nhin, vic khai bo kiu hm l khng cn thit. Cc ngn ng hm thng c khnng uy din kiu tng nhmt b kim tra kiu (type checker). Khi khng khai bo kiuhm, chng hn nu chnh ngha hm triple bi :

    triple x = 3 * x

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    36/227

    NGUYN L LP TRNH HM 21

    th b kim tra kiu s suy ra rng x phi l mt s, v x l mt tha s trong mt php nhn.B kim tra kiu cng suy ra c rng kt qu ca triple x phi l mt s, do kiuca hm ny phi l :

    triple :: num > num

    Tnh a kiu l yu t rt quan trng trong nhiu ngn ng hm. Vi mi tham bin hnh

    thc (formal parameters), mt hm a kiu c th chp nhn li gi tng ng vi nhiutham i thc s(actual parameters) c cc kiu khc nhau. Khc vi cc th tc trong Ada,mt hm a kiu l mt hm n (single function), khng phi l cc hm bi (multiplefunctions) c cng tn. V d xt hm a kiu pair sau y tr v mt danh sch t hai thami l hai phn t :

    pair x y = [x, y]

    Hm ny c thc s dng nh sau :

    pair 1 2

    --> [1, 2]

    pair true false

    --> [true, false]

    pair [] [2]

    --> [[], [2]]

    Hm pairc nh ngha n, nhng c th s dng nhiu kiu tham i khc nhau,nhbool, num, [num], v.v..., sao cho c hai tham i u phi c cng mt kiu. Nh vy,kiu ca hm pair khng thc din t nh kiu ca hm triple va nh ngha trn, v rng cc kiu ca cc tham i trong pair l khng cnh. Ngi ta a ra giiphp s dng cc bin kiu c th (generic type variables). Bn trong mt khai bo kiu,mt bin kiu c th chnh mt kiu no , cng mt bin kiu cho php chnh cngmt kiu xuyn sut c khai bo.

    Miranda s dng cc k hiu *, **, *** chnh kiu tu . V d hm ng nht id(identity) c nh ngha nh sau :

    id x = x

    Hm id c khai bo kiu nh sau :

    id :: * -> *

    c ngha l id c nhiu kiu. Sau y l mt s khai bo kiu ca cc hm c nhngha trn y :

    fac :: num -> num

    ack :: num -> num-> num

    sum :: [num] -> num

    month :: [char] -> bool

    reverse :: [*] -> [*]

    fst :: (*, **) -> *

    snd :: (*, **)-> **

    foldr :: (*-> ** -> **) -> ** -> [*] -> **

    perms :: [*] -> [[*]]

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    37/227

    22 LP TRNH HM

    Cc quy tc nh ngha kiu nh trn lm trnh c sai st khi s dng hm khng ng,chng hn :

    pair 1 true || cc tham i phi cng kiu5 + (pair 1 2) || kiu kt qu l mt danh sch, khng l mt s.

    Trong v d th hai, Miranda xem rng kiu ca (pair 1 2) l mt danh sch cc s,

    nn khng th dng lm s hng cho mt php cng.D cc hm c tha nhn cc tham i khc kiu v khng cn khai bo kiu mt cch

    tng minh, h thng kiu va m t trn y l cht ch v dng tnh. S vi phm cc quytc nh kiu s dn n cc thng bo li khi dch (compile time error messages).

    Tuy nhin vic thm cc khai bo kiu hm thng lm cho b kim tra kiu d vi phmsai st khi s dng hm.

    I.2.8. Tnh hm theo kiu khn ngoanThng thng, khi gi tnh gi tr mt hm, cc tham i c tnh gi tr trc tin, sau

    mi tin hnh thc hin tnh ton trong hm. Chng hn, li gi :

    mult (fac 3) (fac 4)

    yu cu tnh gi tr cc hm giai tha (fac 3) v (fac 4) trc, theo mt th t ty ,sau mi thc hin hm nhn :

    mult 6 24

    cho kt qu cui cng l 144. Cch vit rt gn biu thc lc u thnh dng n gin hnc gi lphp rt gn theo th tp dng (applicative order reduction). Ch rng phprt gn c bt u t cc biu thc trong cng nht (innermost expressions).

    Tuy nhin c mt cch khc rt gn mt biu thc l bt u t biu thc ngoi nht(outermost expression) v khng tnh gi tr cc biu thc con (subexpressions) cho n khicn dng n kt qu ca chng.

    Ngi ta gi cch ny l rt gn theo thtthng (normal order reduction). Chng hnbiu thc :

    mult (fac 3) (fac 4)

    sc rt gn thnh :(fac 3) * (fac 4)

    sau thnh :6 * 24

    nhn c kt qu 144.

    Nhng ngi lp trnh c kinh nghim trn cc ngn ng mnh lnh c th ngh rngphp rt gn theo th t p dng l thun tin hn, nhng cch ny cng c nhng iu bt

    tin.Gi s rng ta mun xy dng hm cond nhn mt gi trbool b nh l tham i th

    nht v tr v tham i th hai ca n nu b c gi trtrue hoc tr v tham i th ba nub l false :

    cond b x y = x, if b

    cond b x y = y, otherwise

    hay gn hn :

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    38/227

    NGUYN L LP TRNH HM 23

    cond true x y = x

    cond false x y = y

    Nu c ba tham i ca condc tnh gi tr trc khi hm condc thc hin, ths xy ra hai trng hp :

    Mt trong cc tham i ca cond tham gia tnh ton mt cch v ch, dn n kt qu

    sai, chng hn cond (x=0) 0 (1/x) vi x=0. Nu vic tnh ton biu thc tham i l v ch v khng kt thc th s gy ra ton bbiu thc b tnh lp v hn ln.

    Trng hp th hai c thc minh ha qua v d sau : gi s ta cng s dng hmcond cho mt nh ngha khc ca hm fac :

    fac n = cond (n = 0) 1 (n * fac (n - 1))

    Nu tham i th ba ca cond lun lun c tnh, th hm fac s khng bao gidng.Bi v li gi fac 1 ko theo li gi fac 0, li gi fac 0 s ko theo li gi fac 1v c th tip tc.

    Nhng vn trn dn n khi nim tnh gi tr theo kiu khn ngoan trong lp trnh

    hm s dng php rt gn theo th t thng. tng ca phng php tnh gi tr hm theokiu khn ngoan l ch tnh gi tr cc tham i ca mt hm khi cc gi tr ca chng l cnthit, nhng biu thc no khng cn thit th b qua.

    S dng tnh gi tr hm theo kiu khn ngoan, php tnh hm fac 1 sc rt gnnhc trnh by di y. Vic tnh gi tr kt thc v cho kt qung. y ta s dngbiu thc if dng gi ng (pseuclo-notation). Tham i th ba ca cond s khng ctnh nu n bng 0, v rng trong trng hp ny, khng cn tnh tham i na.

    fac 1

    --> cond (1=0) 1 (1*fac (1-1)) || gi fac

    --> if (1=0) then 1 else (1*fac (1-1)) || gi cond

    --> if false then 1 else (1*fac (1-1)) || tnh 1 = 0--> 1*fac (1-1)

    --> 1*(cond (1-1 = 0) 1 ((1-1)-1))) || gi fac--> 1*((if 1-1=0) then 1 else ((1-1)*fac ((1-1)-1)))

    || gi cond--> 1*((if true then 1 else ((1-1)*fac ((1-1)-1)))

    || tnh 1-1 = 0

    --> 1*1 || tnh 1*1

    --> 1

    Phng php tnh hm kiu khn ngoan cn th hin mt li ch quan trng khc : cho

    php nh ngha cc cu trc d liu v hn theo kiu nim (conceptually infinite). Chnghn trong Miranda, danh sch cc s nguyn dng c thc nh ngha :

    [1.. ]

    Danh sch theo kiu nh ngha ny c th tham gia tnh ton nh mi danh sch khc.Chng hn :

    hd [1.. ]

    --> 1 || phn t th nhthd (tl [1.. ])

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    39/227

    24 LP TRNH HM

    --> 2 || phn t th haihd (tl (map triple [1.. ]))

    --> 6 || phn t th hai ca danh sch c nhn 3

    Thc t, ngn ng Miranda ch cho php xy dng cc danh sch hu hn. Ch khi tonb cc phn t ca danh sch c yu cu, nh l :

    sumlist [1..] || cng dn tt c cc s nguyn dnghoc :#[1.. ] || tnh di ca danh sch v hn

    s lm cho h thng ri vo mt vng lp v hn (hoc gy trn b nh). Sau y l mt s vd khc :

    ones = 1 : ones

    repeat a = L

    where L = a : L

    nats = [0.. ]

    odds = [1, 3.. ]

    squares = [ n*n | n 1035 + 23 * 45

    --> 1035 + 1035

    --> 2070

    Trong khi , php rt gn theo th t p dng li tnh n gin hn v hiu qu hn :double 23 * 45

    --> double 1035--> 1035 + 1035

    --> 2070

    Vn ny c th c gii quyt bng cch s dng k thut th rt gn (graphreduction). y l k thut hoc khng tnh, hoc tnh gi tr cc biu thc ng mt ln,nhng khng tnh nhiu ln.

    Mt vn khc l tnh gi tr ca cc tham i trc khi gi hm. Thc t cho thy victnh trc tham i d dng ci t hn l tr hon thc hin chng. Tuy nhin, iu ny lm

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    40/227

    NGUYN L LP TRNH HM 25

    tng chi ph tnh gi tr hm theo kiu khn ngoan cao hn bnh thng. Hin nay, ngi taang pht trin cc phng php ti u nhm gim tng chi ph ny.

    Khng phi mi ngn ng hm u c kiu tnh khn ngoan nh va trnh by. Nhngngn ng khng c kh nng ny cho cc hm do ngi s dng t xy dng (user definedfunctions) thng c sn mt vi hm vi ng ngha khn ngoan (v d hm cond). Ccngn ng mnh lnh cng c nhng yu t mang ng ngha khn ngoan c xy dng sn,chng hn lnh if. Ngn ng C v Ada c cc php logic (dng short cut) and v orcbit cho php tnh gi tr tham i th hai ch khi cn thit.

    I.2.9. Mt s v dSau y ta xt mt s v d khc vit trong Miranda minh ha nhng c trng cbn

    ca lp trnh hm va c trnh by trn y : loi b nhng phn t trng nhau trong mtdanh sch c sp xp th t, sp xp nhanh mt danh sch (quicksort), gii bi ton 8qun hu v tm dy s Hamming.

    1. Loi b nhng phn t trng nhauTa cn xy dng hm uniq nhn mt danh sch cc phn t c sp xp tr vmt danh sch loi b nhng phn t trng nhau ng trc, ch gi li mt phn tng

    sau cng. Ta c chng trnh nh sau :

    uniq [] = [] || ca thot (escape hatch) : danh sch rnguniq (a:(a:L)) = uniq (a:L) || b mt trong hai phn tu tin bng nhauuniq (a:L) = a : uniq L || ch xt danh sch bi phn tu

    Dng chng trnh th nht tm thng : danh sch rng xem nh c x l. Dngth hai s dng kh nng th hin mt bin (a) hai ln trong cng mt v tri. Mt khi dngny c tip cn, th mt li gi quy s xut hin vi tham i l danh sch ban unhng loi b phn tu (head) do trng nhau. Chng hn danh sch [3, 3, 4] chcn li [3, 4] phi x l. Nu nh c hai dng chng trnh u b b qua th dng th ba

    c chn. Dng ny ny cng to ra mt li gi quy vi phn tu tin ca danh schl ci ra ca n. Chng hn danh sch [3, 4, 5] dn n ch cn phi x l [4, 5].

    Cch nh ngha hm uniq trn y s dng cc mu so khp. Mt cch khc l sdng cc iu kin lnh canh v phi nhng nh vy s lm chng trnh tr nn didng hn.

    Cui cng, ta thy hm uniq l a kiu. Hm c thc gi vi nhiu kiu khc nhauca tham i thc s. Chng hn :

    uniq [3, 3, 4, 6, 6, 6, 6, 7]

    --> [3, 4, 6, 7]

    uniq [a, b, b, c]

    --> [a, b, c]

    2. Sp xp nhanh quicksortThut ton quicksort sp xp nhanh cc phn t ca mt danh sch (thng l cc s)

    theo th t khng gim. sp xp, u tin quicksort xc nh gi tr ca phn tu tinca danh sch, gi l x. Tip theo, quicksort to ra hai danh sch con, mt danh sch chacc gi tr nh hn hoc bng x, v mt danh sch cha gi tr ln hn x. Mi mt danh schc sp xp mt cch quy (bng cch gi li quicksort). Cui cng, cc danh sch kt

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    41/227

    26 LP TRNH HM

    qu v gi trxc rp li vi nhau v tr v kt qu l danh sch c sp xp. Phn tc gi l phn t trc (pivot).

    Thut ton quicksort c vit nh sau :quicksort [] = [] || danh sch rng coi nh c sp xpquicksort (x:Tail) || trng hp tng qut :

    = quicksort [a | a [a, b, c, d]

    3. Bi ton tm qun huNi dung bi ton tm qun hu (eight queens problem) nh sau : hy tm cch t tm

    qun hu ln mt bn cvua (c 88 , lc u khng cha qun cno) sao cho khng cqun hu no n c qun hu no ? Theo lut cvua, mt qun hu c thn c bt cqun c(ca i phng) no nm trn cng ct, hay cng hng, hay cng ng cho thun,hay cng ng cho nghch vi n.

    Hnh I.6. Mt li gii ca bi ton tm qun hu.

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    42/227

    NGUYN L LP TRNH HM 27

    Bi ton tm qun hu c nh Ton hc ngi c Call Friedrich Gauss a ra vonm 1850 nhng khng c li gii hon ton theo phng php gii tch. Sau bi ton nyc nhiu ngi gii trn vn trn my tnh in t, theo nhiu cch khc gii nhau.

    tng chung ca mi li gii l phi lm sao t mt qun hu trn mi ct , do vy cth biu din bn cbi mt danh sch cc s nguyn cho bit v tr hng ca mi qun hutrong mi ct lin tip. Hm queens n trong chng trnh sau y tr v mi v tr an ton

    t cc qun hu trn n ct u tin.queens 0 = [[]]

    queens (n+1)= [q:b | b

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    43/227

    28 LP TRNH HM

    mt dng kt qu ra u c sp xp theo th t tng dn. Mt qu trnh th t lmnhim v trn (merge) ba dng kt qu sao cho cc sa ra c th t tng dn v loi bmi s trng nhau. Kt qu trn c em quay ngc li thnh dng vo tip tc qutrnh nhn.

    Lc u, gi tr 1 c ly lm dng vo. Nh vy dng vo s cha ng cc sHamming theo dy tng dn v khng cha cc s trng nhau.

    Gi tr khi u 1 l mt s Hamming, sau c nhn vi 2, 3 hoc 5 cng l nhng sHamming, cn cc s khng c to ra theo cch nhn ny s khng phi l cc sHamming.

    Mc d ngn ng Miranda khng c cc qu trnh song song, nhng m hnh trn y rtd dng c trin khai trong ngn ng ny, bng cch s dng k thut tnh gi tr hm theokiu khn ngoan. Chng trnh Miranda nh sau :

    mul :: num > [num] > [num] || nhn cc phn tmul a s = [a *x | x

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    44/227

    NGUYN L LP TRNH HM 29

    I.3 Kt lunCho n nay, cc ngn ng hm c pht trin l Lisp, ISWIM, FP, Scheme,

    Common Lisp, Hope, Standard ML, Miranda, Haskell v Lucid. Phn tip theo ca gio trnhny s nghin cu Scheme, mt ngn ng hm c ngun gc t Lisp.

    Ngn ng Lisp (List processing languages) c xut bi Mc Carthy t nm 1958.Rt nhiu khi nim v lp trnh hm c pht trin t ngn ng Lisp. Lisp hin i likhng phi l ngn ng hm thun ty, m cho php s dng cc php gn cho bin, v dovy, c th xy ra hiu ng ph.

    Tuy nhin, Lisp l ngn ngu tin mang phong cch lp trnh hm. Lisp cho php vitcc hm quy v cc hm bc cao. Danh sch l cu trc d liu ch yu ca Lisp. Vic cppht v gii ta b nhc tin hnh tng, nhk thut dn rc (garbage collection).

    Ngn ng Lisp ch yu c pht trin cho cc ng dng k hiu (symbolicapplications), c bit trong lnh vc tr tu nhn to (artificial intelligence). i vi cc php

    tnh s th Lisp s dng khng hiu qu v tc tnh ton chm. Mt im yu khc caLisp l cc chng trnh Lisp thng rt kh c, kh hiu, do c php s dng cc dungoc l ch yu. V d, hm factorial tnh giai tha, c vit trong chng trnh Lispnh sau :

    (defun factorial (n)

    (if (

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    45/227

    30 LP TRNH HM

    Tm tt chng 1

    Lp trnh hm to ra nhng hm nhn cc gi tr vo thuc mt min xc nh cho

    ra kt qu l cc gi tr thuc mt min khc, ging nh mt hm ton hc. Cc ngnng hm thun ty thiu cc yu t mnh lnh nh php gn v cc lnh lp. Tuynhin, cc hm khng gy ra hiu ng ph nh hu ht cc ngn ng mnh lnh gpphi.

    Cc ngn ng hm thun ty c tnh nht qun trong kt qu tr v ca hm, ngha ktqu ca mt php p dng hm khng ph thuc vo thi im c gi m ch phthuc vo cc tham i c cung cp khi gi hm nh th no.

    Tnh nht qun khi hm tr v kt qu lm cho mt chng trnh hm dc, d thayi, d m phng song song v d chng minh tnh ng n.

    Nhng khi nim quan trng nht trong cc ngn ng hm l cc hm quy, danhsch, tnh a kiu, cc hm bc cao, tham i ho tng phn v so khp cc phng

    trnh. Cc ngn ng hm s dng php quy thay cho php lp.

    Danh sch l cu trc d liu chnh ca cc ngn ng hm. Nhiu php ton trn danhsch l tin nh (predefined).

    Vic qun l b nhcho cc cu trc d liu c tin hnh tng. Ngi lp trnhkhng cn quan tm n s c mt ca cc a ch my (machine address) v khng xl d liu kiu con tr. Vic gii ta b nhkhng cn cn dng n na cng ctin hnh tng theo k thut dn rc.

    Cc ngn ng hm hin i cho php x l cc hm a kiu, mi hm c th nhnnhiu tham i c kiu khc nhau. Mt s ngn ng hm s dng php nh kiu ngt,nhng cc kiu lun c suy on (inferred) bi b kim sot kiu v ngi lp trnhkhng cn phi m t trc (nh trong cc ngn ng mnh lnh).

    Mt hm bc cao nhn mt hm lm tham i. Cc hm bc cao mang li tnh mmdo ng k cho cc ngn ng hm.

    Php rt gn theo th t p dng tnh gi tr cc tham i ca hm trc tin, sau mi tnh n bn thn hm. Php rt gn theo th t chun li p dng hm cho cctham i khng cn tnh gi tr, v ch tnh gi tr cc tham i khi thc s cn thit.

    Php rt gn theo th t chun cn c trn k thut tnh gi tr hm theo kiu khnngoan, cho php x l cc cu trc d liu v hn nu c th. K thut ny t ra thnthin hn so vi k thut tnh gi tr c li, nhng kh vn hnh c hiu qu.

    Cc ngn ng hm hin i m t cc hm nh mt tp hp cc phng trnh (set of

    equations) v s dng k thut so khp la chn cc phng trnh tha mn mtmu cho.

    Cc ngn ng hm khng thun ty (impure functional languages) nh Lisp mang mts tnh cht ca ngn ng hm, nhng khng c tnh nht qun khi hm tr v kt qu.

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    46/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    47/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    48/227

    33

    CHNG II. NGN NG SCHEMEA line may take us hours, yet if it does not seem a moment's thought

    All our stitching and unstitching has been as nought.Yeats - Adam's Curse

    II.1 Gii thiu Schemecheme l mt ngn ng thao tc k hiu (symbolic manipulation) do Guy LewisSteele Jr. v Gerald Jay Sussman xut nm 1975 ti MIT (Massachusetts Instituteof Technology, Hoa K), sau c pht trin nhanh chng v ng dng rt ph

    bin. Scheme l ngn ng thuc h Lisp v mang tnh s phm cao. Scheme gii quyt thchhp cc bi ton ton hc v x l k hiu. Theo W. Clinger v J. Rees3 :

    ... Scheme demonstrate that a very small number of rules for forming expressions, withno restrictions on how they are composed, suffice to form a pratical and efficient

    programming language that is flexible enough to support most of the major programmingparadigms in use today... .

    Tng t cc ngn ng hm khc, Scheme c c php rt n gin nn rt d lp trnh.Cc cu trc d liu csca Scheme l danh sch v cy, da trn khi nim vkiu d

    liu tru tng (data abstraction type). Mt chng trnh Scheme l mt dy cc nh nghahm (hay th tc) gp li nh ngha mt hoc nhiu hm phc tp hn. Hot ng cbntrong lp trnh Scheme l tnh gi tr cc biu thc. Scheme lm vic theo ch tng tc(interaction) vi ngi s dng.

    Mi vng tng tc xy ra nh sau :

    Ngi s dng g vo mt biu thc, sau mi dng nhn enter (). H thng in ra kt qu (hoc bo li) v qua dng mi.

    H thng a ra mt du nhc (prompt character) v chngi s dng a vo mtbiu thc tip theo...

    Vic la chn du nhc ty theo quy c ca h thng, thng thng l du ln hn (>)

    hoc du hi (?)4

    .Mt dy cc php tnh gi tr biu thc trong mt vng tng tc c gi l mt chu

    lm vic (session). Sau mi chu, Scheme a ra thi gian v s lng b nh (bytes) sdng tnh ton.

    tin theo di, cun sch s dng cc quy c nh sau :

    3Xem ti liu nh ngha ngn ng Scheme ti a chhttp://www.swiss.ai.mit.edu/~jaffer/r5rs_toc.html 4

    Trong cun sch ny, tc gi khng ghi ra du nhc h thng (du >) cho dc.

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    49/227

    34 LP TRNH HM

    Kt qu tnh ton c ghi theo sau du mi tn (-->).

    Cc thng bo v li sai c t trc bi ba du sao (***).

    C php ca mt biu thc c vit theo quy c EBNF kiu ch nghing m.V d :

    tin trnh by ting Vit, mt s phn ch thch v kt qu tnh ton khng in theo

    kiu ch Courier.Ch thch trong Scheme

    Ch thch (comment) dng din gii phn chng trnh lin quan gip ngi c dhiu, d theo di nhng khng c hiu lc i vi Scheme (Scheme b qua phn ch thchkhi thc hin). Ch thch c bt u bi mt du chm phy (;), c vit trn mt dngbt k, hoc tu dng, hoc cui dng. V d :

    ; this is a comment line

    (define x 2) ;nh ngha bin x c gi tr 2

    ;;; The FACT procedure computes the factorial

    ;;; of a non-negative integer.

    (define fact(lambda (n)

    (if (= n 0)

    1 ; Base case: return 1

    (* n (fact (- n 1))))))

    II.2 Cc kiu d liu ca SchemeKiu d liu (data type) l mt tp hp cc gi tr c quan h cng loi vi nhau (related

    values). Cc kiu d liu c x l tu theo bn cht ca chng v thng c tnh phn cp.

    Trong Scheme c hai loi kiu d liu l kiu n gin (simple data type) v kiu phc hp(compound data type). Trong chng ny, ta s xt cc kiu d liu n gin trc.

    II.2.1. Cc kiu d liu n ginCc kiu d liu n gin ca Scheme bao gm kiu s(number), kiu lgch (boolean),

    kiu k t(character) v kiu k hiu (symbol).

    II.2.1.1. Kiu sKiu s ca Scheme c th l s nguyn (integer), s thc (real), s hu t (rational) v

    s phc (complex ) nh sau :

    Kiu s V ds nguyn 52s thc 3.0, -2.5s hu t 6/10, 23/5s phc 3+4i, 3

    Scheme khng phn bit s nguyn hay s thc. Cc s khng hn ch v ln, min lb nhhin ti cho php.

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    50/227

    NGN NG SCHEME 35

    Vi cc s, Scheme cng s dng cc php ton s hc thng dng +, -, *, /, max, min,

    php ly cn bc hai

    v so snh s hc vi s lng i s tng ng :

    (+ x1 ... xn) --> x1 + ... + xn(- x1 x2) --> x1- x2(* x1 ... xn) --> x1 * ... * xn

    (/ x1 x2) --> x1/ x2(quotient x1 x2) --> phn nguyn ca (x1/ x2)(remainder x1 x2) --> phn d ca php chia nguyn (x1/ x2), ly dux1

    (modulo x1 x2) --> phn d ca php chia nguyn (x1/ x2) , ly dux2

    (max x1 ... xn) --> max (x1, ..., xn)(min x1 ... xn) --> min (x1, ..., xn)

    (sqrt x) --> x

    Cc php so snh sau y tr v#t nu kt qu so snh ln lt cc gi trx1, ..., xnctho mn, ngc li tr v#f :

    (= x1 ... xn)

    (< x1 ... xn)( x1 ... xn)

    (>= x1 ... xn)

    V d :

    (* 1 2 3 4 5 6 7 8 9)

    --> 362880

    (= 1 2 3 4 5)

    --> #f

    (= 1 1 1 1 1)

    --> #t

    (< 1 2 3 4 5)

    --> #t

    (> 4 3 2 1)

    --> #t

    ( #t

    (>= 6 5 4 3 2 1)

    --> #t

    Th tch hnh cu bn knhR :

    (* 3 pi R R R)

    Nhit Farenheit c biu din qua nhit Celsius C :

    (+ 32 (* 9/5 C))

    Mt biu thc Scheme c th trn ln ln cc s nguyn v cc s thc :

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    51/227

    36 LP TRNH HM

    (+ 2.3 5)

    --> 7.3

    Php tnh trn cc s hu t :

    (* 2/3 5/2)

    --> 10/6

    Cng lc c th g vo nhiu biu thc (trc khi Enter) nhn c nhiu kt qu :(* 2 3)(+ 1 4)(- 7 9)

    --> 6

    5

    -2

    K t

    Mt k t (character) ca Scheme c dng #\. V d :#\a

    --> #\a ;cha thng

    #\A--> #\A ;chA hoa#\(--> #\( du ngoc tri

    Chui

    Chui (string) l kiu d liu phc hp ca Scheme, gm dy cc k t tu t gia haidu nhy kp, nhng cc du nhy kp ny vn c gi nguyn trong gi tr ca chui :

    Cho cc bn !

    --> Cho cc bn !

    Tn

    Mi ngn ng lp trnh u s dng tn ch nh cc i tng cn x l. TrongScheme, tn c to thnh t cc ch ci, ch s v cc du c bit, tr# () [] v ducch (space) dng phn cch cc i tng.

    Tn ca Scheme c bt u bi mt ch ci v khng phn bit ch hoa ch thng.Vit pi hay PIu cng ch mt tn. Nn chn t tn bit ni (mnemonic) v s dngcc du ni (-). Chng hn cc tn sau y u hp l :

    pi * pi-chia-2x + a34kTMNs

    soup vector

    II.2.1.2. Kiu lgch v v tMi ngn ng lp trnh u s dng cc cu trc iu khin s dng n cc gi tr lgch

    v do , cn biu din cc gi tr lgch. Trong Scheme, cc hng c sn kiu lgch l #t(true) v #f(false).

    V t (predicate) l mt hm lun tr v gi tr lgch. Theo quy c, tn cc v tckt thc bi mt du chm hi (?).

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    52/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    53/227

    38 LP TRNH HM

    II.2.1.3. K hiuNgn ng Scheme khng ch x l cc gi tr kiu s, kiu lgch v kiu chui nh

    trnh by, m cn c thxl k hiu nhphp trch dn. Gi tr k hiu ca Scheme l mttn (ging tn bin) m khng gn vi mt gi tr no khc. Ch Scheme lun lun in ra cck hiu trch dn dng ch thng.

    Kiu trch dn vn hay gp trong ngn ng ni v vit hng ngy. Khi ni vi ai rnghy vit ra tn anh, th ngi c th hnh ng theo hai cch :

    - hoc vit Trng Chi, nu ngi tn l Trng Chi v hiu cu ni l vit ra tnca mnh.

    - hoc vit tn anh, nu ngi hiu cu ni l phi vit ra cm ttn anh.

    Trong ngn ng vit, ngi ta dng cc du nhy (n hoc kp) ch r cho cch trli th hai l : hy vit ra tn anh. Khi cn gn mt gi tr k hiu cho mt tn, ngi tahay gp sai st. Chng hn, vic gn gi tr k hiu l pierre cho mt bin c tn lfirst-name :

    (define first-name pierre)

    *** ERROR unbound variable: pierre.

    y xut hin sai st v Scheme tnh gi tr ca tn pierre, nhng tn ny li khngc gi tr. ch cho Scheme gi tr chnh l k hiu pierre, ngi ta t trc gi trpierre mtphp trch dn (quote operator) :

    pierre

    --> pierre

    K t l cch vit tt ca hm quote trong Scheme :

    tng ng vi (quote )

    Hm quote l mt dng c bit tin nh cho php tr v tham i ca n d tham il th no m khng tnh gi tr :

    (quote pierre)--> pierre

    Khi nim trch dn c tc dng quan trng : khi nim bng nhau trong ngn ng tnhin v trong Scheme l khc nhau v mt Ton hc :

    1 + 2 = 3 nhng 1 + 2 3

    (= (+ 1 2) 3)

    --> #t

    nhng :(= (+ 1 2) 3)

    --> error !!!!! khng cng gi tr

    Ta c thnh ngha kt qu trch dn cho bin :

    (define first-name pierre)

    By gi, nu cn in ra gi tr ca first-name, ta c :

    first-name

    --> pierre

    (define x 3)

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    54/227

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    55/227

    40 LP TRNH HM

    sc vit thnh :

    (+ 4 76 19)

    Ch t du cch hay khong trng (space) gia du php ton v gia mi ton hng.Ngi ta c th trn ln cc php ton :

    34*21 - 5*18*7 c vit thnh (- (* 34 21) (* 5 18 7)),

    -(2*3*4) c vit thnh (- (* 2 3 4)).Mt trong nhng li ch ca vic s dng cc cp du ngoc trong biu thc l th tu

    tin thc hin ca cc php ton c bo m, khng mp mv khng sb nhm ln.

    Dng tin tc s dng cho tt c cc biu thc. V d, p dng hm f cho cc i s2, 0 v 18 vit theo dng Ton hc l f(2,0,18) v c biu din trong Scheme l (f2 0 18). y, cc du phy c thay th bi cc du cch phn cch cc thnhphn.

    Cch vit cc biu thc dng ngoc tin t lm tng nhanh s lng cc du ngoc thottin lm hoang mang ngi c. Tuy nhin, ngi s dng s nhanh chng lm quen v rtnhiu phin bn ca Scheme hin nay (trong mi trng ca s v ho) c kh nng kim

    tra tnh tng thch gia cc cp du ngoc s dng trong biu thc.Cc biu thc c th lng nhau nhiu mc. Quy tc tnh gi tr theo trnh tp dng (xemmc II.7, chng 1) nh sau : cc biu thc trong cng nht c tnh gi tr trc, sau thc hin php ton l cc biu thc bn ngoi tip theo. Lp li qu trnh ny nhiu ln chon khi cc biu thc c tnh ht.

    (+ (* 2 3) 4) ;= (+ 6 4)--> 10

    R rng cc biu thc lng nhau lm ngi c kh theo di, chng hn biu thc sauy kh theo di :

    (+ 1 (* 2 3 (- 5 1)) 3) ;= (+ 1 (* 2 3 4) 3) = (+ 1 24 3)

    Nn vit biu thc trn nhiu dng khc nhau theo quy c vit tht dng (indentation)v cn thng ng tng t cc dng lnh trong cc chng trnh c cu trc (Pascal, C,Ada...). Biu thc trn c vit li nh sau :

    (+ 1

    (* 2 3 (- 5 1))

    3)

    --> 28

    Ngi ta thng vit thng ng cc ton hng ca mt hm, tht vo so vi tn hm.Chng hn biu thc (f a b c)c vit :

    (f a

    b

    c)Tuy nhin, cch vit ny cn tu thuc vo thi quen (hay sthch) ca ngi lp trnh.

    Khi cc ton hng l nhng biu thc phc tp, ngi ta c th cn thng ng nh va ni,nhng khi cc biu thc l n gin, ngi ta c th vit cn theo hng ngang cho tin.

    Do gi tr ca mt biu thc khng ph thuc vo cch vit nh th no, cc du cch vcc du qua dng u c cng mt ngha trong Scheme, nn ngi lp trnh c th vndng quy c vit tht dng sao cho ph hp vi thi quen ca h.

    Chng hn biu thc Ton hc :

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    56/227

    NGN NG SCHEME 41

    2 2

    sin( ) sin( )

    1

    a b

    a b

    +

    + +

    c th vit trong Scheme :(/ (+ (sin a) (sin b))

    (sqrt (+ 1 (* a a) (* b b))))

    II.2.3. S-biu thcNgi ta gi s-biu thc (s-expression, s c ngha l symbolic) l tt c cc kiu d liu

    c th gp nhm li vi nhau (lumped together) ng n v mt c php trong Scheme. Vd sau y u l cc s-biu thc ca Scheme :

    42#\A(1 . 2)

    (a b c)#(a b c)Hello(quote pierre)(string->number 16)(begin (display Hello, World!) (newline))

    Mi s-biu thc khng phi lun lun ng n v mt c php hoc v mt ng ngha,ngha l s-biu thc khng phi lun lun c mt gi tr. Scheme tnh gi tr ca mt biuthc ngay khi biu thc ng n v mt c php, hoc thng bo li sai. V d biuthc sau y vo ng :

    (+7 ; l du enter(* 3 4)) --> 19

    Sau khi g (+7 ri , Scheme li vu dng tip theo v tip tc ch (con tr nhpnhy) v biu thc cha ng n v mt c php. Ch khi g tip (* 3 4)) mi lm xuthin kt qu trn u dng tip theo do biu thc vo ng. Biu thc sau y vo sai vgy ra li :

    (+ 3 (*6 7))

    --> ERROR: unbound variable: *6

    ; in expression: (... *6 7); in top level environment.

    ; Evaluation took 0 mSec (0 in gc) 11 cells work,38 bytes other

    II.3 Cc nh ngha trong SchemeII.3.1. nh ngha bin

    Bin (variable) l mt tn gi c gn mt gi tr c kiu no . Mt bin chnh mtv tr nh lu gi gi tr ny. Cc tn c bit nhdefine gi l t kha ca ngn ng don chnh mt php ton tin nh. Chng hn, khi mun chnh cho tn bin pi mt gitr3.14, ta vit :

  • 8/6/2019 Lp trnh hm - Ts.Phan Duy Khnh

    57/227

    42 LP TRNH HM

    (define pi 3.14159)

    khi , ta c

    pi

    --> 3.14159

    Dng tng qut ca nh ngha bin nh sau :

    (define var expr)

    Sau khi nh ngha bin var s nhn gi tr ca biu thc expr.

    V d : nh ngha bin root2 :

    (define root2 (sqrt 2))

    root2

    --> 1.4142135623730951

    khi root2 c thc s dng nh sau :

    (* root2 root2)

    --> 2.000000000000000 ; 15 con s0

    Tuy nhin, nu s dng mt tn cha c nh ngha trc , Scheme s thng bo li :toto--> *** ERROR-- unbound variable : toto ; cha c