135
1 ESF projekts 2005/0125/VPD1/ESF/PIAA/04/APK/3. 2.3.2/0062/0007 RTU akadēmiskās studiju programmas “DATORSISTĒMAS” kursu pilnveidošana Priekšmets: Funkcionāla programmēšana

Priekšmets: Funkcionāla programmēšana

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

Page 1: Priekšmets: Funkcionāla programmēšana

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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