priekšmets: funkcionāla programmēšana
DESCRIPTION
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: [email protected] http:// www.cs.rtu.lv. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/1.jpg)
1
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Priekšmets: Funkcionāla programmēšana
![Page 2: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/2.jpg)
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/00072RTU 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: [email protected]://www.cs.rtu.lv
![Page 3: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/3.jpg)
3
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 4: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/4.jpg)
4
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 5: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/5.jpg)
5
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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.
![Page 6: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/6.jpg)
6
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 7: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/7.jpg)
7
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 8: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/8.jpg)
8
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Ievads (4)Imperatīva valoda
Input (a,b)
c := a + b
Print (c)
Sakums -> Vidus
-> Nobeigums
Funkcionāla valoda
Print (Plus Input() Input() )
Nobeigums ( Vidus (Sakums) )
![Page 9: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/9.jpg)
9
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 10: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/10.jpg)
10
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 11: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/11.jpg)
11
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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))
![Page 12: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/12.jpg)
12
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 13: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/13.jpg)
13
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 14: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/14.jpg)
14
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 15: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/15.jpg)
15
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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ā
![Page 16: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/16.jpg)
16
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 17: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/17.jpg)
17
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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– Ja X 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
![Page 18: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/18.jpg)
18
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 19: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/19.jpg)
19
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 20: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/20.jpg)
20
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 21: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/21.jpg)
21
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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šana u.t.t.– tiek noteikti ar speciālu funkciju palīdzību
![Page 22: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/22.jpg)
22
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Valodas apraksts (11)• Funkcija QUOTE
– Funkcija QUOTE vienī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
![Page 23: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/23.jpg)
23
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 24: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/24.jpg)
24
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 25: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/25.jpg)
25
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 26: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/26.jpg)
26
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 27: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/27.jpg)
27
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 28: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/28.jpg)
28
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 29: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/29.jpg)
29
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 30: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/30.jpg)
30
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 31: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/31.jpg)
31
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 32: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/32.jpg)
32
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 33: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/33.jpg)
33
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 34: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/34.jpg)
34
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 35: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/35.jpg)
35
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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 pirma
elementa– 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)
![Page 36: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/36.jpg)
36
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 37: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/37.jpg)
37
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 38: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/38.jpg)
38
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 39: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/39.jpg)
39
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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.
![Page 40: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/40.jpg)
40
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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))))
![Page 41: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/41.jpg)
41
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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)
![Page 42: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/42.jpg)
42
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 43: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/43.jpg)
43
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 44: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/44.jpg)
44
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 45: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/45.jpg)
45
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 46: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/46.jpg)
46
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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.
![Page 47: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/47.jpg)
47
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 48: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/48.jpg)
48
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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))
![Page 49: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/49.jpg)
49
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 50: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/50.jpg)
50
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU 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
![Page 51: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/51.jpg)
51
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Nosacījuma izteiksmes (5)• Vispārējā gadījumā
– LISP pēc kārtas apskata katru pāri – ja nosacījuma vērtība ir NIL tiek ņemts nākošais
pāris– ja nosacījuma vērtība kaut kas cits, bet ne NIL,
tad LISP apstājas šajā vietā un par rezultātu ņem dotā pāra otro elementu
– (COND ((CDR L) 2) (T 1)) vērtība būs 2, ja L ir saraksts no vairāk kā viena elementa
– Pēdējais pāris ar T nodrošina ka nosacījuma izteiksmei vienmēr ir vērtība (else sastāvdaļa)
![Page 52: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/52.jpg)
52
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursīvas funkcijas • faktoriāla rekursīvais nosacījums:
– 0! = 1;– n! = n*(n-1)!
• algoritmiska valodā:integer procedure fact(n);
integer n;
fact:=if n =0 then 1 else n x fact (n-1);
end
![Page 53: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/53.jpg)
53
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursīvas funkcijas (2) • Valodā LISP
(DEFUN FACT (N)
(COND ((ZEROP N) 1)
(T (* N (FACT (- N 1))))
)
)
![Page 54: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/54.jpg)
54
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Sarakstu rekursīvā apstrāde• Noteiksim funkciju ADD
– saskaita visus saraksta elementus• ja L ir (1 2 3 4 5), tad (ADD L) ir 15
(DEFUN ADD (L) (COND
((NULL L) 0)
(T (+ (CAR L)(ADD (CDR L))))
) )
![Page 55: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/55.jpg)
55
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Sarakstu rekursīvā apstrāde (2)• Līdzīgā veidā var noteikt funkciju
MULT– saraksta skaitļu reizinājums
• ja L ir (1 2 3 4 5), tad (MULT L) ir 120
(DEFUN MULT (L) (COND
((NULL L) 1)
(T (* (CAR L)(MULT (CDR L))))
) )
![Page 56: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/56.jpg)
56
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Apakšsaraksti un rekursija• Funkcija ADD strādā nepareizi, ja
saraksts L satur apakšsarakstus– funkcijas PLUS argumenti var būt tikai
atomi
• Noteiksim funkciju ADD2– saskaita visus saraksta un to
apakšsarakstus elementus• ja L ir (1 (2 (3 4)) 5), tad (ADD2 L) ir 15
![Page 57: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/57.jpg)
57
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Apakšsaraksti un rekursija (2)(DEFUN ADD2 (L) (COND
((NULL L) 0)
((ATOM (CAR L))
(+ (CAR L) (ADD2 (CDR L)))
)
(T (+ (ADD2 (CAR L)) (ADD2 (CDR L))))
) )
(ADD2 ‘(3 ((8 4) 7 (5 6))))
![Page 58: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/58.jpg)
58
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursīvie predikāti• COND
– pāru otrais elements• T vai NIL
• Funkcija MEMBER – divi argumenti:
• atoms X• saraksts L
– ja X ir L sastāvdaļa, tad (MEMBER X L) ir T, pretējā gadījumā NIL
![Page 59: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/59.jpg)
59
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursīvie predikāti (2)(DEFUN MEMBER (X L) (COND
((NULL L) NIL)
((EQUAL X (CAR L) T)
(T (MEMBER X (CDR L))) ))
(MEMBER ? ?)
![Page 60: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/60.jpg)
60
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Loģiskie operatori• "loģiskais UN" (konjunkcija)• "loģiskais VAI" (disjunkcija)• noliegums (inversija)• funkcija NOT
– viens arguments– vērtība ir T, ja par argumentu kalpo NIL,
un NIL, ja par argumentu kalpo kaut kas atšķirīgs no NIL• Faktiski tā dara to pašu, ko funkcija NULL
![Page 61: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/61.jpg)
61
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Loģiskie operatori (2)• Funkcija AND
– nenoteikts argumentu skaits– vērtība vienmēr būs NIL, ja kaut viens arguments
vienāds ar NIL– pretējā gadījumā vērtība būs T
• Funkcija OR– nenoteikts argumentu skaits– vērtība vienmēr būs T, ja kaut viens arguments
nav vienāds ar NIL– pretējā gadījumā vērtība būs NIL
![Page 62: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/62.jpg)
62
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Loģiskie operatori (2)• Noteiksim funkciju MEM2
– saistīta ar MEMBER tieši tāpat, kā ADD2 ar ADD
– pārbaudīs • vai pirmais arguments nav kāda saraksta
loceklis• vai kāda tā apakšsaraksta loceklis• vai kāda tā apakšsaraksta apakšsaraksta
loceklis• un tā tālāk
![Page 63: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/63.jpg)
63
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Loģiskie operatori (3)(DEFUN MEM2 (X L) (COND
((NULL L) NIL)
(T (OR (COND ((ATOM (CAR L)) (EQUAL X (CAR L)))
(T (MEM2 X (CAR L)))
)
(MEM2 X (CDR L))
) ) )
![Page 64: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/64.jpg)
64
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursīvās funkcijas no diviem sarakstiem
• ka tiek noteikta funkcija APPEND– apvieno divus sarakstus(DEFUN APPEND (L M) (COND((NULL L) M)(T (CONS (CAR L) (APPEND (CDR L) M ) ))) )
(APPEND L M ) ja L ir (1 2 3) un M ir (4 5 6)
![Page 65: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/65.jpg)
65
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursīvās funkcijas no diviem sarakstiem (2)
• noteiksim funkciju EQUAL– argumenti var būt saraksti ar apakšsarakstiem – ar funkcijas EQ palīdzību
• argumenti tikai atomi
– saraksti L un M ir vienādi, ja• vienādi ir to pirmie elementi (CAR L) un (CAR M)• un vienādas arī atlikušās sarakstu daļas (CDR L) un
(CDR M)• jābūt vienādiem abiem šiem pāriem
![Page 66: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/66.jpg)
66
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursīvās funkcijas no diviem sarakstiem (3)
(DEFUN EQUAL (L M) (COND((NULL L) NULL M))((ATOM L) (AND (ATOM M) (EQ L M)))((ATOM M) NIL)(T (AND (EQUAL (CAR L) (CAR M)) (EQUAL (CDR L) (CDR M))) )) )
![Page 67: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/67.jpg)
67
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas tipu izzināšanai• predikāts NUMBERP
– viens arguments– predikāta vērtība ir T ja argumentam ir
skaitliska vērtība– ja X ir 5, tad (NUMBERP X) ir T– ja X ir simboli ABC, tad (NUMBERP X) ir
NIL– ja X ir (1 2 3), tad (NUMBERP X) ir NIL
![Page 68: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/68.jpg)
68
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas tipu izzināšanai (2)• funkcijas FIXP un FLOATP
– viens arguments– FIXP vērtība ir T ja arguments ir skaitlis ar
fiksētu punktu– FLOATP vērtība ir T ja arguments ir skaitlis ar
peldošu punktu– ja X ir 7, tad (FIXP X) ir T, bet (FLOATP X) ir NIL– ja X ir 7.5, tad (FIXP X) ir NIL, bet (FLOATP X) ir T
![Page 69: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/69.jpg)
69
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas tipu izzināšanai (3)• Noteiksim funkciju COUNTFIXFLOAT
– funkcijas arguments ir saraksts L– funkcijas vērtība būs saraksts no diviem
elementiem• pirmais elements – ciparu skaits formā ar fiksētu
punktu• otrais - ciparu skaits ar peldošu punktu
– ja X ir (T LAM 5.6 3(8((9.1 4.122 J)B 6 3.1 R)), tad– (COUNTFIXFLOAT X) ir (3 4)
![Page 70: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/70.jpg)
70
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas tipu izzināšanai (4)(DEFUN COUNTFIXFLOAT (L) (COND((NULL L) (QUOTE (0 0)))((ATOM L) (COND ((FIXP L) (QUOTE (1 0))) ((FLOATP L) (QUOTE (0 1))) (T (QUOTE (0 0))) )(T (SUM2 (COUNTFIXFLOAT (CAR L)) (COUNTFIXFLOAT (CDR L))) ) ))
![Page 71: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/71.jpg)
71
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas tipu izzināšanai (5)(DEFUN SUM2 (L M)
(CONS (+ (CAR L) (CAR M))
(LIST (+ (CADR L) (CADR M)))
)
)
ja X ir (4 3), bet Y ir (7 2), tad
(SUM2 X Y) ir (11 5)
![Page 72: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/72.jpg)
72
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Dažadi piemeri• Skaitlisko elementu summa
– Anoloģiski ADD, bet sarakstā L var but simboliskie atomi
(DEFUN ADDNUM (L) (COND ((NULL L)0)
((NUMBERP (CAR L)) (+ (CAR L) (ADDNUM (CDR
L))))
(T(ADDNUM (CDR L))) ))
![Page 73: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/73.jpg)
73
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Dažadi piemeri (2)• Skaitlisko elementu skaits
– sarakstā L var but simboliskie atomi
(DEFUN QUANNUM (L) (COND ((NULL L)0)
((NUMBERP (CAR L)) (+ 1 (QUANNUM (CDR L))))
(T(QUANNUM (CDR L))) ))
![Page 74: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/74.jpg)
74
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Dažadi piemeri (3)• Atomu skaits sarakstā
– sarakstā L var but apakšsaraksti
(DEFUN NUMATOM (L) (COND ((NULL L)0)
((ATOM (CAR L)) (+ 1 (NUMATOM (CDR L))))
(T(NUMATOM (CDR L))) ))
![Page 75: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/75.jpg)
75
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Dažadi piemeri (4)• Atomu skaits sarakstā un
apakšsarakstus
(DEFUN ATOMS (L) (COND ((NULL L)0)
((ATOM (CAR L)) (+ 1 (ATOMS (CDR L))))
(T(+ (ATOMS (CAR L)) (ATOMS (CDR L)))) ))
![Page 76: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/76.jpg)
76
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Dažadi piemeri (5)• Minimalais elements
– Sarakstā tikai skaitli
(DEFUN MIN (L) (COND ((NULL L)NIL)
((NULL (CDR L))(CAR L))
((< (CAR L) (MIN (CDR L)))(CAR L))
(T(MIN (CDR L))) ))
![Page 77: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/77.jpg)
77
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Dažadi piemeri (6)• Minimalais elements
– Sarakstā ne tikai skaitli
(DEFUN MINI (L) (MIN (ONLYNUM (L))))
(DEFUN ONLYNUM (L) (COND ((NULL L)NIL)
((NUMBERP (CAR L)) (CONS (CAR L) (ONLYNUM (CDR L))))
(T(ONLYNUM (CDR L))) ))
![Page 78: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/78.jpg)
78
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
1. uzdevums
Uzdevuma Nr Studenta Nr Uzdevuma Nr Studenta Nr
1 1, 11, 21, ... 6 6, 6, 26. ...
2 2, 12, 22, ... 7 7, 17, 27, ...
3 3, 13, 23, ... 8 8, 18, 28, ...
4 4, 14, 24, ... 9 9, 19, 29, ...
5 5, 15, 25, ... 10 10, 20, 30, ...
![Page 79: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/79.jpg)
79
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
1. Uzdevums (2)1. Atrast negatīvo un pozitīvo elementu
summas (saraksts no atomiem un apakšsarakstiem)
2. Atrast negatīvo, nulles un pozitīvo elementu skaitus (saraksts no atomiem un apakšsarakstiem)
3. Nošķirot elementus lai pirmie būtu atomi un pēc tam apakšsaraksti (saraksts no atomiem un apakšsarakstiem)
![Page 80: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/80.jpg)
80
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
1. Uzdevums (3)4. Nošķirot elementus lai pirmie būtu
apakšsaraksti un pēc tam atomi jeb kura secība (saraksts no atomiem un apakšsarakstiem)
5. Nošķirot elementus lai pirmie būtu negatīvie un pēc tam pozitīvie tāda paša secība ka sākotnējā saraksta (saraksts no atomiem)
![Page 81: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/81.jpg)
81
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
1. Uzdevums (4)6. Izsvītrot dublikātus lai palika pirmais no
tiem (saraksts no atomiem un apakšsarakstiem)
7. Izsvītrot dublikātus lai palika pēdējais no tiem (saraksts no atomiem un apakšsarakstiem)
8. Izsvītrot elementus ar līdzīgu vērtību un pretējo zīmi lai palika pirmais (saraksts no atomiem un apakšsarakstiem)
![Page 82: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/82.jpg)
82
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
1. Uzdevums (5)9. Izsvītrot elementus ar līdzīgu vērtību un
pretējo zīmi lai palika pēdējais (saraksts no atomiem un apakšsarakstiem)
10. Izskaitļot atkārtojošos elementus skaitli (saraksts no atomiem un apakšsarakstiem)
![Page 83: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/83.jpg)
83
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
1. Uzdevums (6)Saraksts no atomiem un apakšsarakstiem
(2 -3 (4 3 0 2) (4 -4) (2 (2 0 2)) -3)
Saraksts no atomiem (5. uzdevums)
(2 -3 4 -4 2 0 2 -3)
Uzvards, variants
Rezultāts?
![Page 84: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/84.jpg)
84
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
1. Uzdevums (7)• Atskaite
– Uzdevums– Pirmteksts– kontrolpiemeri
• Mans variants• Visi principiāli atšķirojušies varianti
– Min» Pirmais, pedejais, vidū» Vienigais, atkartojušais» Pozitivs, negativs
![Page 85: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/85.jpg)
85
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG - izteiksmes• secīgu operatoru veids• pārveido funkcionālo pierakstu uz
nefunkcionālo pierakstu– realizē algoritmiskās valodās jēdzienus:
• apraksti• operatori• iezīmes• vadības nodošana• nosacījuma izteiksmes• vērtību atgriešana
![Page 86: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/86.jpg)
86
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG – izteiksmes (2)• Apraksti
– pirmais funkcijas PROG arguments• mainīgo saraksts, kuri tiks izmantoti dotajā PROG
– parametri netiek ieslēgti šajā sarakstā– mainīgā tips netiek noteikts
• atkarīgs no piešķirtas vērtības
– mainīgo vērtībām jābūt noteiktām, līdz to lietošanas momentam
– mainīgie var būt saraksti• var izmantot masīvu vietā
![Page 87: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/87.jpg)
87
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG – izteiksmes (3)• Operatori
– piešķirta PROG argumentu loma– SETQ un SET tipa izteiksmes
• Iezīmes– piešķirta PROG argumentu loma– vienmēr atsevišķs atoms
• atšķiras no griešanās pie funkcijām
![Page 88: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/88.jpg)
88
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG – izteiksmes (4)• ir trīs tipu PROG argumenti:
– pirmais arguments• PROG- mainīgo saraksts
– operatori• lai grieztos pie funkcijām
– iezīmes
• argumentu skaits ir neierobežots
![Page 89: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/89.jpg)
89
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG – izteiksmes (5)• Vadības nodošana
– operators GO– vienīgais arguments ir iezīme– (GO SIGMA)
• nozīmē vadības nodošanu uz iezīmi SIGMA• operatoram, kurš seko tūlīt pēc šīs iezīmes
![Page 90: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/90.jpg)
90
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG – izteiksmes (6)• Nosacījuma izteiksmes
– funkcija COND– divas atšķirības no izmantošanu funkcijās
• pāra otrais elements nav lielums, bet ir operators– jebkura tipa
• pēdējam pārim nav obligāti jāsākas ar T– Tas ir analoģiski operatoram IF-THEN bez ELSE daļas
• Vērtības atgriešana– funkcija RETURN– viens arguments– PROG - izteiksmes vērtība
![Page 91: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/91.jpg)
91
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Faktoriāls• Variants algoritmiska valodā:
INTEGER FUNCTION FACT(N)I=NJ=1
1 IF (I .EQ. 0) GOTO 2J=J*II=I-1GOTO 1
2 FACT=JRETURNEND
![Page 92: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/92.jpg)
92
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG - Faktoriāls• Variants valodā LISP:
(DEFUN FACT (N) (PROG (I J)
(SETQ I N) (SET J 1)
K (COND ((ZEROP I) (GO L)))
(SETQ J (* J I))
(SETQ I (- I 1))
(GO K)
L (RETURN J) ))
![Page 93: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/93.jpg)
93
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Sarakstu apstrāde• tas nebūtu saraksts, bet gan drīzāk
viendimensiju masīvs• Indekss
– mainās ar vieninieku lai pāriet uz nākošo masīva elementu
• funkcija CDR izsvītro pirmo saraksta elementu
– algoritmiska valodā:S=0
DO 1 I=1,100
1 S=S+A(I)
![Page 94: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/94.jpg)
94
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Sarakstu apstrāde (2)• pārrakstīsim funkciju ADD, izmantojot
PROG- izteiksmes(DEFUN ADD (L) (PROG (M N)(SETQ M L) (SETQ N 0)A (COND ((NULL M) (RETURN N)))(SETQ N (+ N (CAR M)))(SETQ M (CDR M)) (GO A) ))• nav tik efektīva un “caurspīdīga” kā
rekursīvā
![Page 95: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/95.jpg)
95
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Sarakstu veidošana• pats efektīvākais saraksta apstrādes veids
– apstrāde no sākuma– CAR un CDR
• veidot sarakstu visefektīvāk no beigām– pēdējo elementu jāizskaitļo pirmo– jauni elementi jāpievieno saraksta sākumā– pirmo saraksta elementu jāizskaitļo pēdējo– CONS
![Page 96: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/96.jpg)
96
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Sarakstu veidošana (2)• Noteiksim programmu REVERSE
– pārraksta sarakstu apgrieztā kartībā
(DEFUN REVERSE (L) (PROG (M P)
(SETQ M L) (SETQ P NIL)
A(COND (( NULL M) (RETURN P)))
(SETQ P (CONS (CAR M) P))
(SETQ M (CDR M)) (GO A) ))
![Page 97: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/97.jpg)
97
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Sarakstu veidošana (3)• Izveidošana it ka no sakuma• noteiksim funkciju DOUBLE
– dubulto katru veselu skaitli no veselu skaitļu saraksta
(DEFUN DOUBLE (X) (COND ((NULL X) X)
(T (CONS (+ (CAR X)(CAR X))
(DOUBLE (CDR X))
) ) ) )
![Page 98: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/98.jpg)
98
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas darbība• Divdimensiju masīvs - sarakstu
saraksts– vieninieku matrica δij NxN,
• δij = 1, ja i=j un• δij = 0, ja i nav = j,• kur 1<= i, j <=N
– N=4 • ( (1 0 0 0) (0 1 0 0) (0 0 1 0) (0 0 0 1) )
![Page 99: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/99.jpg)
99
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas darbība (2)• Noteiksim funkciju UNITMATR
– (UNITMATR N) rezultāts ir vieninieku masīvs NxN
(DEFUN UNITMATR (N) (PROG (I J K L Z)I - matricas rindas kārtas numursJ - matricas stabiņa kārtas numursK- saraksts, kurš atbilst tekošai rindaiL - rezultējoša matricaZ - tekošais matricas rindas elements
![Page 100: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/100.jpg)
100
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkcijas darbība (3)(SETQ I N) (SETQ L NIL)
A (SETQ J N) (SETQ K NIL)B (COND ((EQUAL I J)(SETQ Z 1))
(T (SETQ Z 0)) )(SETQ K (CONS Z K)) (SETQ J (- J 1))(COND ((> J 0)(GO B)))(SETQ L (CONS K L) (SETQ I (- I 1))(COND ((> I 0)(GO A)))(RETURN L) ))
![Page 101: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/101.jpg)
101
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Programmas saīsināšana• izmantot funkciju vienlaicīgi gan
darbību izpildei gan vērtības iegūšanai– nomainīt divus operatorus
(SETQ J (- J 1)) (COND ((> J 0) (GO B)))
– uz vienīgo operatoru(COND ((> (SETQ J (- J 1)) 0) (GO B)))• atņemt 1 no vērtības J• iegūt jaunu J vērtību• pārbaudīt jaunu J vērtību
![Page 102: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/102.jpg)
102
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. uzdevums
Uzdevuma Nr Studenta Nr Uzdevuma Nr Studenta Nr
1 1, 11, 21, ... 6 6, 6, 26. ...
2 2, 12, 22, ... 7 7, 17, 27, ...
3 3, 13, 23, ... 8 8, 18, 28, ...
4 4, 14, 24, ... 9 9, 19, 29, ...
5 5, 15, 25, ... 10 10, 20, 30, ...
![Page 103: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/103.jpg)
103
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. Uzdevums (2)• Ir dots saraksts
( (a11 a12 ... a1n)
(a21 a22 ... a2m)
...
(ak1 ak2 ... akp) )
( b1 b2 ... bk )
( c1 c2 ... cx )x = max {n, m, ... ,p}
![Page 104: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/104.jpg)
104
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. Uzdevums (3)1. Atrast negatīvo un pozitīvo elementu
summas (aij - atomi)
2. Atrast negatīvo, nulles un pozitīvo elementu skaitus (aij - atomi)
3. Nošķirot elementus lai pirmie būtu atomi un pēc tam apakšsaraksti (aij - atomi vai apakšsaraksti)
![Page 105: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/105.jpg)
105
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. Uzdevums (4)4. Nošķirot elementus lai pirmie būtu
apakšsaraksti un pēc tam atomi jeb kura secība (aij - atomi vai apakšsaraksti)
5. Nošķirot elementus lai pirmie būtu negatīvie un pēc tam pozitīvie tāda paša secība ka sākotnējā saraksta (aij - atomi)
![Page 106: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/106.jpg)
106
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. Uzdevums (5)6. Izsvītrot dublikātus lai palika pirmais no
tiem (aij - atomi)
7. Izsvītrot dublikātus lai palika pēdējais no tiem (aij - atomi)
8. Izsvītrot elementus ar līdzīgu vērtību un pretējo zīmi lai palika pirmais (aij - atomi)
![Page 107: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/107.jpg)
107
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. Uzdevums (6)9. Izsvītrot elementus ar līdzīgu vērtību un
pretējo zīmi lai palika pēdējais (aij - atomi)
10. Izskaitļot atkārtojošos elementus skaitli (aij - atomi)
![Page 108: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/108.jpg)
108
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. Uzdevums (7)
Apakšsaraksti no atomiem
( ( 2 -3 4 0 -2)
(-4 0 2)
(-3 3 -4 3) )
Uzvards, variants
Rezultāts?
![Page 109: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/109.jpg)
109
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
2. Uzdevums (8)Apakšsaraksti no atomiem un
apakšsarakstiem
( ( (2) -3 (4) 0 -2)
( -4 0 2)
((-3) (3)-4 3) )
Uzvards, variants
Rezultāts?
![Page 110: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/110.jpg)
110
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Predikāti• jāatgriež T vienā vietā un NIL citā
– pie kam var būt vairāki RETURN operatori vienā PROG- izteiksmē
• piemērs– Predikāta arguments ir saraksts, kurš attēlo
spēļu kārtis– Katra kārts tiek attēlota ar sarakstu, sastāvošu
no diviem elementiem• masts• lielums• (Pīķa dūzis) (Kārava 10) (Kreiča 5)
![Page 111: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/111.jpg)
111
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Predikāti (2)• Noteiksim funkciju PIKUNAV
(DEFUN PIKUNAV (L) (PROG (M P)
(SETQ M L)
A (COND ((NULL M) (RETURN T)))
(SETQ P (CAR M)) (SETQ M (CDR M))
(COND ((EQUAL (CAR P) ‘Pīķa) (RETURN NIL)))
(GO A) ))
![Page 112: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/112.jpg)
112
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursija• PIKUNAV funkcionāla veida
(DEFUN PIKUNAV (L) (COND
((NULL L) T)
(T (AND (NOT (EQUAL (CAAR L) ‘Pīķa))
(PIKUNAV (CDR L))
) )
) )
![Page 113: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/113.jpg)
113
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Predikāti (3)(DEFUN ERCENU_VAIRĀK_KĀ_PĪKU (L)
(PROG ( M P X Y) ;X,Y - ērčeņu pīķu skaits(SETQ M L) (SETQ X 0) (SETQ Y 0)A (COND ((NULL M) (RETURN (> X Y))))
(SETQ P (CAR M)) (SETQ M (CDR M))(COND ((EQUAL (CAR P) ‘Erceni)
(SETQ X (+ X 1)) ) ((EQUAL (CAR P) ‘Pīķa )
(SETQ Y (+ Y 1)) ) )(GO A) ))
![Page 114: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/114.jpg)
114
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
PROG. Predikāti (3)(DEFUN ERCENU_VAIRĀK_KĀ_PĪKU (L)
(PROG ( M P X Y)(SETQ M L) (SETQ X 0) (SETQ Y 0)A (COND ((NULL M) (RETURN (> X Y))))
(SETQ P (CAR M)) (SETQ M (CDR M))(COND ((EQUAL (CAR P) ‘Erceni)
(SETQ X (+ X 1)) ) ((EQUAL (CAR P) ‘Pīķa )
(SETQ Y (+ Y 1)) ) )(GO A) ))
![Page 115: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/115.jpg)
115
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursija• funkcionāla veida
(DEFUN ERCENU_VAIRĀK_KĀ_PĪKU (L)(> (PIKI L) (ERCENI L)) )(DEFUN PIKI (L) (COND((NULL L) 0)((EQUAL (CAAR L) ‘Pīķa) (+ 1 (PIKI (CDR
L))))(T(PIKI (CDR L))) ))(DEFUN ERCENI (L) ...
![Page 116: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/116.jpg)
116
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Rekursija PROG- izteiksmēs• apakšsarakstus apstrāde
(DEFUN ADD2 (L) (PROG (M N X)
(SETQ M L) (SETQ N 0)
A (COND ((NULL M) (RETURN N)))
(SETQ X (CAR M)) (SETQ M (CDR M))
(COND ((ATOM X) (SETQ N (+ N X)))
(T (SETQ N (+ N (ADD2 X)))) )
(GO A) ))
![Page 117: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/117.jpg)
117
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Saīsināšana• iepriekšējais variants
(COND ((ATOM X) (SETQ N (+ N X)))
(T (SETQ N (+ N (ADD2 X)))))
• īsāk(SETQ N (+ N (COND ((ATOM X) X)
(T (ADD2 X)) )))
![Page 118: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/118.jpg)
118
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Apakšsarakstus apstrāde• Noteiksim funkciju ADD3
– arguments ir apakšsarakstus saraksts– vērtība - katra apakšsaraksta elementus summa
atsevišķi– ja X ir ((2 4)(3 1)(6 2)), tad (ADD3 X) ir (6 4 8)
(DEFUN ADD3 (L) (COND (( NULL L) NIL)(CONS (ADD2 (CAR L)) (ADD3 (CDR L))) ))
![Page 119: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/119.jpg)
119
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkciju apvienošanaK=0
Y = X
Z = X
jā
nē
(COND ((ZEROP K) (PROG NIL (SETQ Y X) (SETQ Z X)) ))
(COND ((ZEROP K) (PROGN (SETQ Y X) (SETQ Z X)) ))
![Page 120: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/120.jpg)
120
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkciju apvienošana (2)• Noteiksim funkciju OPPMAX
– argumenti• skaitļu saraksts L• simbolu saraksts M
– vērtība - saraksta M elements, kurš pēc sava stāvokļa atbilst maksimālajam elementam no saraksta L
– ja L ir (3 7 13 9) un M ir (T E S T), tad (OPPMAX L M) ir S
![Page 121: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/121.jpg)
121
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkciju apvienošana (3)(DEFUN OPPMAX (L M) (PROG (A B U V Y Z)
A - kandidāts uz maksimālo elementusākotnēji saraksta L pirmais elements
B - atbilstošais sarakstā M elementssākotnēji arī pirmais
Ja tiek atrasts elements, kurš ir lielāks par A, tad jaunu vērtību iegūst gan A gan B
![Page 122: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/122.jpg)
122
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Funkciju apvienošana (4)(SETQ A (CAR L)) (SETQ B (CAR M))
(SETQ U (CDR L)) (SETQ V (CDR M))
G (COND ((NULL U) (RETURN B)))
(SETQ Y (CAR U)) (SETQ Z (CAR V))
(SETQ U (CDR U)) (SETQ V (CDR V))
(COND ((> Y A)
(PROGN (SETQ A Y)(SETQ B Z)) ))
(GO G) ))
![Page 123: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/123.jpg)
123
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Izskaitļošanas noteikums(SETQ Z 3)(SETQ Y (+ Z (SETQ Z 6))) ;y=3+6=9(SETQ Y (+ (SETQ Z 6) Z))) ;y=6+6=12
• funkcijas izskaitļošanas noteikums– lai izskaitļotu funkciju, tas argumenti gan
atomi, gan griešanas pie funkcijām, tiek izskaitļoti pēc kārtas no kreisās uz labo
– pēc tam funkcijas definīcija tiek pielietota šim vērtību sarakstam
![Page 124: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/124.jpg)
124
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Izskaitļošanas noteikums (2)• AND un OR izskaitļotas citādā veidā
– (AND X Y ...)• vērtība ir ne NIL, ja visi argumenti ir ne NIL• ja X ir NIL, tad (AND X Y) vērtībai ir jābūt NIL• nav nepieciešams izskaitļot Y• tas ne tikai saīsina laiku, bet arī aizsargā no
kļūdu rašanās• (AND (ATOM M)(EQ L M)) ; pareizi• (AND (EQ L M) (ATOM M)) ; kļūdaini
![Page 125: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/125.jpg)
125
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Izskaitļošanas noteikums (3)– (OR X Y ...)
• vērtība ir ne NIL, ja ik viens argumenti ir ne NIL
• ja X ir ne NIL, tad (OR X Y) vērtībai ir jābūt ne NIL
• nav nepieciešams izskaitļot Y• saīsina laiku
![Page 126: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/126.jpg)
126
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Izskaitļojoša funkcija• ja ir mainīgais, kura vērtība ir saraksts• ja saraksts var saprast ka griešanās
pie funkcijas– par pirmo elementu kalpo funkcijas vārds– citi elementi ir tās funkcijas argumenti
• lai atrast šīs funkcijas vērtību jālieto funkciju EVAL
• ja X ir (+ 2 3), tad (EVAL X) ir 5
![Page 127: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/127.jpg)
127
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Izskaitļojoša funkcija (2)• ar EVAL palīdzību var izpildīt operatoru
– kuru ir izveidojusi paša LISP- programma– kurš var mainīties programmas izpildes procesā
• noteikt funkciju– mainīgais NAME – funkcijas nosaukums– mainīgais PARAMETERLIST - šīs funkcijas
parametru saraksts– mainīgais DESCRIPTION – šis funkcijas apraksts
![Page 128: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/128.jpg)
128
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Izskaitļojoša funkcija (3)(EVAL (LIST ‘DEFUN NAME PARAMETERLIST
DESCRIPTION ))• Funkcija LIST izveido sarakstu formā
(DEFUN n p d), – kur n, p un d – ir mainīgajos NAME,
PARAMETERLIST un DESCRIPTION atbilstošā vērtība
• Pēc tam šis saraksts tiek izskaitļots – būs definēta jauna funkcija
![Page 129: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/129.jpg)
129
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Izskaitļojoša funkcija (4)• ja NAME ir simbolu rinda “DIFFERENCE”• ja PARAMETERLIST ir (X Y) - ir saraksts no
burtiem X un Y• ja DESCRIPTION ir saraksts (PLUS X
(MINUS Y))• tad augstāk minētā EVAL izpilde kalpos
funkcijas DIFFERENCE noteikšanai
![Page 130: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/130.jpg)
130
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Programma kā dati• programma ir sarakstu struktūra
• izmantosim mainīgos, kuru vērtības būs programmas dažādas sastāvdaļas
• izskatīsim funkciju
(FOR I J K L DESCR)– kura atbilst operatoram
for I:=J step K until L do DESCR;
![Page 131: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/131.jpg)
131
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Programma kā dati (2)• funkcijas (FOR I J K L DESCR) vērtībai
jābūt :( ( SETQ I J)
B (COND ((> I L) (GO A))) descr (SETQ I (+ I K)) (GO B)
A )kur descr – mainīgajā DESCR vērtība
• būtiska problēma iezīmes B un A
![Page 132: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/132.jpg)
132
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Programma kā dati (3)• iezīmes B un A problēma
– nav iespējams garantēt, ka simboli B un A netiks izmantoti kā iezīmes programmas daļā, kuru ietver DESCR
– Ir iespējams izsaukt FOR vairākas reizes vienā programmā
– tas novedīs pie atkārtoti noteiktām iezīmēm– šī problēma tiek risināta ar valoda LISP funkcijas
GENSYM• funkcija bez argumentiem• ģenerē atomus kuri atšķiras no atomiem, kuri
tika iegūti ar tās palīdzību agrāk
![Page 133: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/133.jpg)
133
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Programma kā dati (4)(DEFUN FOR (I J K L D) (PROG (W X Y Z)(SETQ X (APPEND D (LIST (LIST ‘SETQ I
(LIST ‘+ I K)))))
(SETQ Y (GENSYM)) (SETQ Z (GENSYM))(SETQ X (APPEND X (LIST (LIST ‘GO Y) Z) ))(SETQ W (LIST (LIST ‘SETQ I J)
Y (LIST ‘COND (LIST (LIST ‘> I L) (LIST ‘GO Z )))))
(RETURN (APPEND W X)) ));W - veidojamās programmas pirmā daļa, X - otra
![Page 134: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/134.jpg)
134
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Programma kā dati (5)• Funkcijas (FOR ‘N 1 2 100 ‘((PRINT
N))) rezultāts(SETQ X (APPEND D
(LIST (LIST ‘SETQ I
(LIST ‘+ I K) ) ) ) )
X iegūs vērtību
((PRINT N) (SETQ N (+ N 2 )))
![Page 135: Priekšmets: Funkcionāla programmēšana](https://reader035.vdocuments.mx/reader035/viewer/2022062314/56812bd6550346895d903eeb/html5/thumbnails/135.jpg)
135
ESF projekts2005/0125/VPD1/ESF/PIAA/04/APK/3.2.3.2/
0062/0007RTU akadēmiskās studiju programmas
“DATORSISTĒMAS” kursu pilnveidošana
Bibliography• Huhns M.N. and Singh M.P. (Eds.). Readings in Agents. Morgan
Kaufmann, 1998• Knapik M. and Johnson J. Developing Intelligent Agents for Distributed
Systems, McGraw-Hill, 1998• Murch R. and Johnson T. Intelligent Software Agents, Prentice Hall
PTR, 1999• Russell S. and Norvig P. Artificial Intelligence. A Modern Approach,
Prentice Hall, 2003• Shrikantaiah T.K. and Koenig M.E.D. (Eds.) Knowledge Management
for Information Professionals, ASIS Monograph Series, 1999• Tiwana A. The Knowledge Management Toolkit, Prentice Hall, 2000.• Weiss G. (Ed.) Multiagent Systems. A Modern Approach to Distributed
Artificial Intelligence, The MIT Press, 2000