1 / 135

Priekšmets: Funkcionāla programmēšana

Priekšmets: Funkcionāla programmēšana. Algoritmu realizācija. Asociētais profesors Vjačeslavs Šitikovs Rīgas Tehniskā universitāte Datorzinātnes un Informācijas Tehnoloģijas fakultāte Lietišķo datorsistēmu programmatūras profesoru grupa E-mail: vss@latnet.lv http:// www.cs.rtu.lv.

Download Presentation

Priekšmets: Funkcionāla programmēšana

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Priekšmets: Funkcionāla programmēšana RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  2. Algoritmu realizācija Asociētais profesors Vjačeslavs ŠitikovsRīgas Tehniskā universitāteDatorzinātnes un Informācijas Tehnoloģijas fakultāte Lietišķo datorsistēmu programmatūras profesoru grupaE-mail: vss@latnet.lvhttp://www.cs.rtu.lv RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  3. Pamatliteratūra • Šitikovs V. “Programmēšanas valoda LISP. Lekciju konspekts“ // RTU, 2002, 36 lpp. • Valodas LISP īss apraksts ar piemēriem un paskaidrojumiem • Šitikovs V. “Programmēšanas valoda LISP. Lekciju konspekts“ // RTU, 2002 / Internet - http://www.cs.rtu.lv/PubsLoc/Sitikovs /saturs.htm • Valodas LISP īsa apraksta Internet-versija ar piemēriem un paskaidrojumiem RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  4. Ieteicamajā literatūra • Маурер У. Введение в программирование на языке ЛИСП. – М.: Мир, 1976. – 104. • Valodas LISP īss apraksts ar piemēriem un paskaidrojumiem krievu valodā. • Graham P. “On Lisp. Advanced Techniques for Common Lisp”// Prentice Hall, 1993, 432 pages (free download from http://www.paulgraham.com/onlisptext.html) • Valodas LISP detalizēts apraksts. • Schwarz M. „LISP Tutorial“ / Internet. - http://cs1.cs.nyu.edu/phd_students/schwarz/NLCP/lisp.html • Valodas LISP detalizēta apraksta interaktīva versija RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  5. Ievads • Visu programmēšanas valodu kopu var sadalīt: • algoritmiskās vai imperatīvas (instrukciju valodās) • nealgoritmiskās • Algoritmiskās • norādīta nepieciešamā darbību secība • universālas programmēšanas valodas • Pascal, C, Basic u.t.t. RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  6. Ievads (2) • speciālu uzdevumu risināšanā • GPSS - vispārējas apkalpošanas sistēmu modelēšanai • PROLOG - teorēmu pierādījuma tipa uzdevumiem • LISP - dialoga realizēšanai valodā, kura ir tuva dabīgai valodai RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  7. Ievads (3) • LISP • saīsinājums no LISt Processing - sarakstu apstrādāšana • nealgoritmiska programmēšanas valoda • funkcionāla programmēšanas valoda RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  8. Ievads (4) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  9. Ievads (5) • LISP • Džona Maikarta vadībā • Masačūsetas tehnoloģiskajā institūtā • 1960.gadā • lai aprakstītu simbolisko izteiksmju rekursīvās funkcijas RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  10. Ievads (6) • LISP • funkciju valoda • katra konstrukcija, kura ir uzrakstīta valodā LISP, tiek apskatīta kā funkcija • (A B C) ir A(B,C) • sin x • algoritmiskā valodās izskatās kā sin(x) • valodā LISP kā(sin x) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  11. Ievads (7) • valodā LISP izņēmumu nav • x + y • tiek pierakstīts kā (+ x y) • par funkcijas argumentu var būt citas funkcijas rezultāts • (A+B)*(C+D) • tiek pierakstīts kā (*(+ A B)(+ C D)) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  12. Valodas apraksts • Alfabēts • burti • cipari • ierobežotāji • ( - kreisa apaļa iekāva • )- laba apaļa iekāva • _ - intervāls • Litera - drukāta zīme no alfabēta RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  13. Valodas apraksts (2) • Atoms • patvaļīga literu secība, kura atrodas starp diviem ierobežotājiem un pie kuras nepieder paši ierobežotāji • konstrukcijā (A(ATOM X24)-ABC(-10 2.5)) atomi ir • A ATOM X24 -ABC -10 2.5 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  14. Valodas apraksts (3) • Atomi • konstantes • identifikatori • mainīgie • funkciju vārdi • jāsākas ar burtu un tam jāsastāv tikai no burtiem un cipariem • nav ierobežojumu mainīgā vārda garumam RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  15. Valodas apraksts (4) • rezervēti identifikatori • T - patiess (true), • F - nepatiess (false), • NIL - tukšums, kurš bieži tiek lietots “nepatiess” vietā RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  16. Valodas apraksts (5) • Mainīgajam var būt vērtība • Viens no vērtību piešķiršanas veidiem • izmantojot funkciju SETQ • (SETQ X 5) analoģiski X:=5 • (SETQ X (+ Y 1)) analoģiski x:=y+1 • (SETQ X Y)analoģiski x:=y • (SETQ X (QUOTE Y))analoģiski x:=“y” • (SETQ X ‘Y) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  17. Valodas apraksts (6) • SETQ • netieši tiek izmantota funkcija QUOTE • piešķires funkcija SET • (SET X Y) nozīme ka vērtībai X tiek piešķita Y vērtība • JaX ir vienāds ar 3 un Y ir vienāds ar 6, tad funkcija SET piešķirt skaitlim 3 skaitļa 6 vērtību, kas ir bezjēdzība • (SET(QUOTE X) Y)vai(SETQ X Y) • piešķir mainīgajam X vērtību 6 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  18. Valodas apraksts (7) • ja X vērtība ir simbols Z • (SET X Y) ievieto mainīgajā Z mainīgā Y vērtību • analoģiski z:=y RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  19. Valodas apraksts (8) • Saraksti • elementu secība, kura ietverta apaļās iekavās • saraksta elements - atoms vai saraksts • saraksta elementu atdalītāji – intervāli • Atdalītājs ir nepieciešams, ja abi saraksta blakus elementi ir atomi. • Sarakstu piemēri • (A B C D) • (x)((((100))))(1(2 3)4) • () - tukšs saraksts RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  20. Valodas apraksts (9) • Izteiksme ir atoms vai saraksts • Dažām izteiksmēm var būt vērtības • Izteiksmes vērtība arī var būt izteiksme • Izteiksmes, kurām var būt vērtība • konstantes, mainīgie • saraksti • griešanās pie funkcijām • (P Q R) ir funkcijas P vērtība no argumentiem Q un R • (G) - funkcija bez argumentiem RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  21. Valodas apraksts (10) • Ir tikai viens konstrukcijas veids, kurš tiek izskatīts valodā LISP - tās ir funkcijas • Pārējie valoda LISP līdzekļi, tādi kā: • jaunu funkciju noteikšana • nosacījuma un beznosacījuma vadības nodošanau.t.t. • tiek noteikti ar speciālu funkciju palīdzību RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  22. Valodas apraksts (11) • Funkcija QUOTE • Funkcija QUOTEvienīgā, kura neatbilst noteikumam, ka pirmais saraksta elements ir funkcijas vārds, bet pārējie saraksta elementi ir tas funkcijas argumenti • (QUOTE(saraksts)) vērtība ir pats saraksts RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  23. Valodas apraksts (12) • (SETQ X (1 2 3)) ir bezjēdzīga • nozīmē: "mainīgajam x piešķirt funkcijas 1 vērtību ar argumentiem 2 un 3 • (SETQ X (QUOTE (1 2 3))) • mainīgajam X ir piešķirta saraksta vērtība • saīsināti (SETQ X ‘(1 2 3)) • funkcijas LIST vērtība ir tās argumentu saraksts • (LIST 1 2 3) vērtība ir (1 2 3) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  24. Valodas apraksts (13) • ja mainīgajam x ir piešķirta vērtība 2 • (LIST 1 x 3 x)vērtība ir(1 2 3 2) • (QUOTE(1 x 3 x))vērtība ir (1 x 3 x) • Par daudzu funkciju vērtību var būt saraksts • (DIVIDE 65 3) vērtība ir (21 2), kur • 21 - veselā daļa un 2 - dalījuma atlikums RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  25. Valodas apraksts (14) • Ja par funkcijas argumentu jābūt atomam un šī argumenta vietā ir saraksts kaut arī no viena elementa, tas noved pie kļūdas. Piemēram, • (SETQ X (LIST 3)) • (SETQ Y (PLUS X 1)) - kļūda, jo mainīgajam X būs vērtība (3) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  26. Valodas apraksts (15) • Apakšsaraksts - saraksts, kurš ietverts citā sarakstā • ((1 6)7((8 4)3)) • (1 6) • 7 • ((8 4)3) • (8 4) • 3 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  27. Rekursija • griežas pašas pie sevis • tieši vai arī netieši • griežas pati pie sevis – tieši • A griežas pie B un B pie A – netieši • Vispārīgā gadījumā ķēdīte var būt garāka • n! = n * (n-1)! • Pilnīgs noteikums 0! = 1 • izteiksme ir atoms vai (izteiksmju secība) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  28. Funkciju izveidošana • Parasti funkciju aprakstā ir četras pamatdaļas: • apraksta sākuma pazīme (vārds FUNCTION, PROCEDURE u.t.t.) • funkcijas vārds • parametru saraksts pēc kārtas • nākošie teikumi, kuri patiesība nosaka (definē) funkciju RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  29. Funkciju izveidošana (2) • Valodā LISP • DEFUN - funkcija, lai aprakstītu funkciju • 3 argumenti • (DEFUN A (B C) D) • D ir funkcijas A ar argumentiem B un C apraksts • (DEFUN A (X Y) (+ X Y)) • (DEFUN P (X) (* X X)) • (P 7) rezultāts ir 49 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  30. Funkciju izveidošana (3) • Parametri • formālie • tiek lietoti funkcijas aprakstam • tikai identifikatori • faktiskie • lai grieztos pie funkcijas • var būt izteiksmes RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  31. Funkciju izveidošana (4) • F(x,y) = x*x-y*y • (DEFUN F (X Y) (-(* X X) (* Y Y))) • X un Y - formālie parametri • 4 un 3 – faktiskie parametri • (F 4 3) nozīmē, ka • X saistās ar 4 • Y saistās ar 3 • F(4,3) =4*4-3*3=16-9=7 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  32. Funkciju izveidošana (5) • (DEFUN F (X) (- (* X X) (* Y Y))) • funkcijas vērtība ir atkarīga no tā, kāda vērtība funkcijas izskaitļošanas brīdī būs mainīgajam Y • X ir saistošs (lokālais) mainīgais • Y ir brīvais (globālais) mainīgais RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  33. Funkcijas sarakstu apstrādei • trīs primitīvākās • CAR, CDR un CONS • CAR • arguments ir saraksts • vērtība ir pirmais saraksta elements • Ja x ir (2 6 4 7), tad (CAR x) ir 2 • Ja x ir (2 (6 (4 (7)))), tad (CAR x) ir 2 • Ja x ir ((2 6)(4 7)), tad (CAR x) ir (2 6) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  34. Funkcijas sarakstu apstrādei (2) • CAR • Ja x ir ((((2)6)4)7), tad (CAR x) ir (((2)6)4) • Ja x ir atoms, tad (CAR x) novedīs pie kļūdas • (CAR (1 2 3)) ir bezjēdzīga • griešanos pie funkcijas 1 no argumentiem 2 un 3 • (CAR (QUOTE (1 2 3))) vērtība ir 1 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  35. Funkcijas sarakstu apstrādei (3) • CDR • arguments ir saraksts • vērtība ir saraksta atlikums bez pirmaelementa • Ja x ir (2 6 4 7), tad (CDR x) ir (6 4 7) • Ja x ir ((2 6)(4 7)), tad (CDR x) ir ((4 7)) • Ja x ir ((((2) 6) 4) 7), tad (CDR x) ir (7) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  36. Funkcijas sarakstu apstrādei (4) • CDR • Ja x ir saraksts ar precīzi vienu elementu, tad (CDR x) ir NIL, kurš šajā gadījumā apzīmē tukšu sarakstu • Ja x ir atoms, tad (CDR x) novedīs pie kļūdas RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  37. Funkcijas sarakstu apstrādei (5) • CONS • savāc (savieno) to, ko CAR un CDR ir sadalījusi daļās • pirmais arguments vienalga kas • otrais arguments obligāti saraksts • Ja x ir 2 un y ir (6 4 7), tad (CONS x y) ir (2 6 4 7) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  38. Funkcijas sarakstu apstrādei (6) • CONS • Ja x ir 2 un y ir ((6 (4(7)))), tad (CONS x y) ir (2 (6 (4 (7)))) • Ja x ir (2 6) un y ir ((4 7)), tad (CONS x y) ir ((2 6)(4 7)) • Ja x ir (((2) 6) 4) un y ir (7), tad (CONS x y) ir ((((2) 6) 4) 7) • (CONS (CAR x) (CDR x)) ir x RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  39. Funkcijas sarakstu apstrādei (7) • CAR un CDR kombinācijas • (CAR(CDR L))– saraksta L otrais elements • saīsināti (CADR L) • (CAR(CDR (CDR L)))– saraksta L trešais elements • saīsināti (CADDR L) • u.t.t. RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  40. Funkcijas sarakstu apstrādei (8) • Atkarībā no realizācijas D D • C ... R A A • (CDADDR Y) nozīmē (CDR (CAR (CDR (CDR Y)))) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  41. Funkcijas sarakstu apstrādei (9) • APPEND • savieno savā starpā divus sarakstus • Ja X ir (1 2 3) un Y ir (4 5 6), tad (APPEND X Y) ir (1 2 3 4 5 6) • (CONS X Y)būtu ((1 2 3) 4 5 6) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  42. Predikāti • funkcijās, kuru vērtība (rezultāts) var būt "patiesība" vai "meli“ • Valodā LISP predikātiem ir vērtība • T - patiess vai • NIL - nepatiess RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  43. Predikāti (2) • Funkcija ATOM • arguments ir atoms vai saraksts • ja atoms, tad funkcijas vērtība ir T, pretējā gadījumā NIL • ja X ir 5, tad (ATOM X) ir T • ja X ir simbols, tad (ATOM X) ir T • ja X ir (1 2 3), tad (ATOM X) ir NIL RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  44. Predikāti (3) • Funkcija NULL • pārbauda vai tās argumenta vērtība nav NIL • ja X ir 5, tad (NULL X) ir NIL • ja X ir (1 2 3), tad (NULL X) ir NIL • ja X ir NIL, tad (NULL X) ir T • ja X ir saraksts no viena elementa, tad (NULL X) ir NIL, bet (NULL (CDR X)) ir T RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  45. Predikāti (4) • Funkcija EQUAL • pārbauda vai divu tās argumentu vērtība ir vienāda • ja X ir (4 6 (8 3)) un Y ir ((4 6) 8 3), tad (EQUAL X Y) ir NIL • ja X ir (+ 2 2) rezultāts un Y ir 4, tad (EQUAL X Y) ir T RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  46. Predikāti (5) • Funkcija ZEROP • pārbauda vai tās arguments ir nulle • burts P nosaukumā nozīmē "predicate“ • ja arguments ir nulle, tad funkcijas vērtība ir T, pretējā gadījumā - NIL. • Funkcija GREATERP vai > • divi argumenti • Citas funkcijas >= < <= <> u.t.t. RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  47. Nosacījuma izteiksmes • nosacījuma operatora vietā, kā parasti, ir nosacījuma funkcija • funkcija COND • dažos gadījumos varam izlasīt sākot ar "ja" • (COND ((ZEROP S)(SETQ Y 12))) • ja S ir nulle, tad piešķirt mainīgajam Y vērtību 12 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  48. Nosacījuma izteiksmes (2) • COND • nenoteikts argumentu skaits • katrs no argumentiem ir pāris • saraksts no diviem elementiem • pirmais pāra elements ir nosacījums • otrais pāra elements ir lielums vai darbība • (COND ((> A 65) 10)((> A 21) 30)(T 0)) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  49. Nosacījuma izteiksmes (3) • COND • nenoteikts argumentu skaits • katrs no argumentiem ir pāris • saraksts no diviem elementiem • pirmais pāra elements ir nosacījums • otrais pāra elements ir lielums vai darbība • (COND ((> A 65) 10)((> A 21) 30)(T 0)) • if A>65 then 10 else if A>21 then 30 else 0 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

  50. Nosacījuma izteiksmes (4) • Vispārējā gadījumā • LISP pēc kārtas apskata katru pāri no pirmā līdz pēdējam • ja nosacījuma vērtība nav T tiek ņemts nākošais pāris • ja nosacījuma vērtība ir T, tad LISP apstājas šajā vietā un par rezultātu ņem dotā pāra otro elementu • pārbaude uz T, bet uz ne NIL RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana

More Related