1.36k likes | 1.62k Views
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.
E N D
Priekšmets: Funkcionāla programmēšana RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana
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
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
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
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
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
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
Ievads (4) RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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