Upload
darrion-carry
View
69
Download
10
Embed Size (px)
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 Presentation
Citation preview
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
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
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
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
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.
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
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
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) )
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
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)
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))
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
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
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
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ā
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)
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
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
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
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
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
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
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)
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
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)
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
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)
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
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
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
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
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
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)
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
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)
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
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)
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
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.
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))))
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)
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
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
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
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
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.
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
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))
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
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
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)
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
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))))
)
)
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))))
) )
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))))
) )
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
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))))
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
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 ? ?)
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
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
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
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))
) ) )
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)
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
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))) )) )
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
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
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)
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))) ) ))
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)
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))) ))
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))) ))
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))) ))
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)))) ))
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))) ))
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))) ))
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, ...
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)
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)
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)
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)
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?
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
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
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ā
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
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
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
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
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
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) ))
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)
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ā
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
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) ))
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))
) ) ) )
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) )
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
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) ))
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
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, ...
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}
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)
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)
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)
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)
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?
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?
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)
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) ))
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))
) )
) )
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) ))
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) ))
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) ...
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) ))
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)) )))
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))) ))
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)) ))
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
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
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) ))
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
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
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
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
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
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
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
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;
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
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
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
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 )))
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