expresii conditionale - inf.ucv.roinf.ucv.ro/documents/rstoean/c10pnp.pdf · 7 conditionalul cond...

31
Expresii conditionale Ruxandra Stoean http://inf.ucv.ro/~rstoean [email protected]

Upload: others

Post on 03-Sep-2019

27 views

Category:

Documents


4 download

TRANSCRIPT

Expresii conditionale

Ruxandra Stoeanhttp://inf.ucv.ro/[email protected]

2

Conditionalul

• Lisp are doua tipuri de expresii conditionale:▫ IF▫ IF▫ COND

• Functia care exprima clasicul IF are formularea (if test then else):▫ if e cuvint cheie.▫ if e cuvint cheie.▫ Daca test e adevarat, atunci se intoarce valoarea

lui then; altfel, vom obtine valoarea lui else.

3

Exemple simple

4

Exemple – Testare raport

5

Exemple – Modulul unui numar

6

Exemplu – Functia semn

7

Conditionalul COND• Expresia IF este potrivita pentru a alege intre

doua calcule pe baza unui singur test.

• Insa, in momentul in care avem de ales intre teste multiple, folosirea lui IF este greoaie si greselile pot aparea foarte usor.

• In aceste cazuri, vom utiliza alternativa lui IF si • In aceste cazuri, vom utiliza alternativa lui IF si anume conditionalul COND.

• Evident, in cazul invers, cand avem un singur test, este mai eficient sa folosim IF.

8

Conditionalul COND

• Functia COND are sintaxa (cond (p1 e1) … (pnen)):en)):▫ Evalueaza pi-urile in ordine pana cand unul dintre

ele, pj, este true.▫ Atunci intoarce ej.▫ Daca niciun pi nu este evaluat ca True, atunci

intoarce False.

• Fiecare lista (pi ei) poarta numele de pereche COND:▫ pi este testul (conditia).▫ ei este expresia.

9

Exemplu – Functia semn - Reluare

10

Asemanare cu IF-ul procedural

if p then e (cond (p e )if p1 then e1

else if p2 then e2

else if p3 then e3

else e4

(cond (p1 e1)(p2 e2)(p3 e3)(t e4))

11

Recursivitate

12

Folosirea functiilor recursive

• Sa calculam recursiv suma a doua numerenenegative.nenegative.

13

Observarea recursivitatii

14

Definirea unei functii recursive

• Fiecare functie recursiva poate avea formularea:▫ (defun functie lista_variabile (cond ▫ (defun functie lista_variabile (cond

perechi_cond))▫ sau (defun functie lista_variabile (if test then

else)).

• In cazul unei functii recursive corect definite, un apel cu parametri nepotriviti poate genera o apel cu parametri nepotriviti poate genera o recursivitate infinita.

15

Functia ASSERT

• Pentru a evita argumente gresite, atunci cand definim o functie putem folosi constructia assert.definim o functie putem folosi constructia assert.

• Sintaxa acesteia este:(assert asertie (variabile_de_schimbat) string

variabile_mentionate)▫ Asertia este evaluata.▫ Daca este True, functia se executa normal.▫ Daca este True, functia se executa normal.

16

Functia ASSERT

(assert asertie (variabile_de_schimbat) stringvariabile_mentionate)▫ Daca este False, Lisp printeaza o eroare:▫ Daca este False, Lisp printeaza o eroare: Ii da utilizatorului optiunea de a termina sau de a

schimba valorile acelor variabile_de_schimbat. Mesajul din string este afisat. In acest string putem mentiona anumite variabile,

scriind ~S pentru fiecare si trecandu-le in cadrulcampului variabile_mentionate.campului variabile_mentionate.

17

Redefinim suma a doua numere

18

19

O alta versiune a sumei

20

Produsul a doi intregi nenegativi

21

Produsul a doi intregi nenegativi

22

Produsul a doi intregi nenegativi

23

Ridicarea unui numar la putere

24

Recursivitatea la liste

• Ca prim exemplu, sa incercam definirea versiuniiproprii a functiei length, care determinaproprii a functiei length, care determinalungimea unei liste.

• Partea recursiva: Lungimea unei liste nevideeste cu o unitate mai mare decat lungimearestului listei.restului listei.

• Conditia de terminare: Lungimea listei vide() este 0.

25

Lungimea unei liste

(

26

Apartenenta unui element la o lista

27

Testarea daca o lista e formata sau nu numai din numere

28

Testarea daca o lista e formata sau nu numai din numere – alta versiune

29

Verificarea egalitatii lungimii a doua liste

30

Verificarea egalitatii lungimii a doua liste - varianta

31

Pe saptamana viitoare…