Curs Lisp Part 1 Master
Curs Lisp Part 1 Master
2017 / 2018
V. Negru
Universitatea de Vest din Timişoara
Departamentul de Informatică
e-mail: [email protected]
Conţinut curs - I
Conţinut curs - II
Bibliografie
3I
Bibliografie
3 II
Bibliografie
3 III
• http://pauillac.inria.fr/ diaz/gnu-prolog/
• http://www.prologia.fr/
• http://web.info.uvt.ro/ idramnesc/
• http://web.info.uvt.ro/c̃izbasa/lisp/
• http://web.info.uvt.ro/c̃izbasa/prolog/
Caracterizare Lisp
• abstratizare; recursivitate
• programare funcţională
• interpretor / compilator
Exemple
Lambda calcul
3 Definirea funcţiilor
(f (x, y) x^2+x-2)
3 Expresii condiţionale
3 Funcţii recursive
3 Liste
• operaţii cu liste
Interpretorul Lisp
Elemente de bază
3 Atomii
• Numerici (numere)
• Simbolici (simboluri)
>16 >1.25
16 1.25
3 Simboluri
>suma >locul-nasterii
16 arad
Elemente de bază
3 Simboluri
>a
error: unbound variable - a
>"Sir de caractere"
"Sir de caractere"
Elemente de bază
3 Liste
• O listă constă din zero sau mai multe elemente (atomi sau
liste), separate prin spaţii şi cuprinse ı̂ntre paranteze rotunde.
• Exemple:
Elemente de bază
;<text-oarecare>
Elemente de bază
• Exemple:
Elemente de bază
• Exemplu:
>(+ 1 2 3) >(sqrt 4)
6 2
>(* (+ 2 3) 10)
50
>(a 1 2)
error: unbound function - a
Elemente de bază
Elemente de bază
3 Stoparea evaluării
3 Funcţia eval
• Fie y −→ x, x −→ 10:
Elemente de bază
3 Legarea varibilelor
Elemente de bază
(setq <var1 > <val1 > ... <varn > <valn >)
Exemple:
(set <var1 > <val1 > ... <varn > <valn >)
Elemente de bază
Elemente de bază
3 Operaţii cu liste
a b c
a (2)
(1)
c
Elemente de bază
3 Operaţii cu liste
d h
a g
b c e f
Elemente de bază
3 Operaţii cu liste
(car <lista>)
Exemple de utilizare:
Elemente de bază
3 Operaţii cu liste
(cdr <lista>)
Exemple de utilizare:
Operaţii cu liste
3 Operaţii cu liste
car cdr
Elemente de bază
3 Operaţii cu liste
Exemple de utilizare:
Elemente de bază
(a b c) cons (a b c)
cdr (b c)
Elemente de bază
Exemple de utilizare:
Elemente de bază
Exemple de utilizare:
>(list 1 2 3)
(1 2 3)
>(list ’(a b) ’c ’((d e) f))
((a b) c ((d e) f))
>(list 1 ’(2 . 3))
(1 (2 . 3))
>(list nil nil)
(nil nil)
Elemente de bază
(last <lista>)
Elemente de bază
(reverse <lista>)
>(reverse ’(1 2 3 4 5)
(5 4 3 2 1)
>(reverse ’(a (b c d) e))
(e (b c d) a)
(length <lista>)
Definirea funcţilor
unde:
Definirea funcţiilor
3 Exemple de utilizare:
>(patrat 2) >(calcul 2 3 4)
4 14
>(setq y 3) >(setq x 3 y 2 z 4)
3 4
>(patrat y) >(calcul x y z)
9 11
Definirea funcţiilor
3 Evaluarea
• Se identifică funcţia;
• Se evaluează argumentele;
legare
p−1 p−2 ... p−m parametri
Definirea funcţiilor
>(setq x 1 y 2) >(setq x 1 y 2)
>(defun f1 (x) >(defun f2 (x)
(+ x y)) (setq x 10)
>(f1 3) (+ x y)
5 >(f2 x)
>x 12
1 >x
>y 1
2
>(setq x 1 y 2) >(setq x 1 y 2)
>(defun f3 (x) >(defun f4 (x)
(setq x 10 y 20) (setq x 10)
(+ x y)) (+ (symbol-value ’x) y)
>(f3 x) >(f4 x)
30 3
>y >x
20 1
Expresii
3 Expresii condiţionale
3 Predicate Lisp
Expresii
• Expresii aritmetice
>(setq x 4)
>(* 2 (+ 3 (sqrt x)))
>6
• Expresii relaţionale
>(setq x 10)
>(>= x 2)
t
>(string= "a" "bcd")
nil
• Expresii logice
>(setq x 10 y 5)
>(and (> x 5) (< y 10))
t
Testul de egalitate
• Identitate structurală
>(setq x a b c))
>(setq y (cdr x))
>(setq z b c))
>(eq y (cdr x))
t
>(eq y z)
nil
• Izomorfism structural
>(equal y z)
t
Expresii condiţionale
Predicate lisp
Funcţii de ramificare
• if
>(setq x 10)
>(if (> x 15) 1 2)
2
>(if (
• cond
(cond <clauza-1>
<clauza-2>
...
<clauza-n>)
unde <clauza-i>::=(<ec> <e> <e> ... <e>)
Cond
• Exemple
Conclusions
3•
Recursivitate
Recursivitate
3 Exemple
• GNU:
GNU = Gnu is Not Unix
• numerele naturale:
0 este număr natural;
succesorul unui număr natural este un număr natural.
• arborii binari:
o este un arbore binar (arborele vid);
dacă t1 şi t2 sunt arbori binari atunci şi
o
t1 t2
Recursivitate
<listă-de-numere>::=()
<listă-de-numere>::=(<număr> . <listă-de-numere>)
<listă-de-numere>::=({<număr>}*)
Recursivitate
3 Exemple
Funcţii recursive
3 Caracterizare
• abstractizare, corectitudine
• lizibilitate
• iterativ ↔ recursiv
Funcţii recursive
Funcţii recursive
3 Calculul factorialului
sau
Calculul factorialului
n=3 6
n=2 2
n=1 1
n=0 1
Recursivitate
Funcţii recursive
• if, cond
Exemplu:
3 Recursivitate simpla,
3 Recursivitate arborescentă,
3 Recursivitate dublă
Recursivitate simplă
0 dacă l = nil
our length(l) =
1 + our length((cdrl)) altfel
Recursivitate dublă
1 dacă n = 1
f ib(n) =
1 dacă n = 1
f ib(n − 1) ∗ f ib(n − 2) dacă n > 1
Recursivitate dublă
3
2 2
3
2 1 1
1 1 1 0
2
1 0 1
1
>(trace fib)
(FIB)
>(fib 4)
0: (FIB 4)
1: (FIB 3)
2: (FIB 2)
3: (FIB 1)
3: returned 1
3: (FIB 0)
3: returned 1
2: returned 2
2: (FIB 1)
2: returned 1
1: returned 3
1: (FIB 2)
2: (FIB 1)
2: returned 1
2: (FIB 0)
2: returned 1
1: returned 2
0: returned 5
5
((a b) c) (d)
(a b c) (d)
(a b)
(c) nil nil
(a b) (c)
nil nil
3 Funcţia fact:
3 Arborele inversat
n=3 6
rez=1
1
n=2 6
rez=1
2
n=1 6
rez=2
3
n=0 6
rez=6
4
Recursivitate
Recursivitate
3•
3 Recursivitate compusă
• În cazul ı̂n care ı̂n cadrul argumentelor unei funcţii recursive
există apeluri recursive spunem că avem recursivitate com-
pusă.
A<I, 0>=I+1
A<0,J>=A<1,J-1>
A<i,j>=A<A<I-1,J>,J-1>
Recursivitate
Recursivitate nemomotonă
f (xk )
xk+1 = xk −
Df (xk )
(defun f (x)
(- (* x x x) 1) )
(defun df (x)
(* 3 x x) )
(defun newx (x)
(- x (/ (f x) (df x))) )
(defun newton (x)
(cond ((< (abs (f x)) 0.00001) x)
(t (newton (newx x))) ))
Recursivitate nemonotonă
>(newton -1.0)
0: (NEWTON -1.0)
1: (NEWTON -0.3333333)
2: (NEWTON 2.7777781)
3: (NEWTON 1.895052)
4: (NEWTON 1.3561869)
5: (NEWTON 1.0853586)
6: (NEWTON 1.0065371)
7: (NEWTON 1.0000424)
8: (NEWTON 1.0)
8: returned 1.0
7: returned 1.0
6: returned 1.0
5: returned 1.0
4: returned 1.0
3: returned 1.0
2: returned 1.0
1: returned 1.0
0: returned 1.0
1.0
Recursivitate
Recursivitate
Recursivitate
3 Probleme
• Operaţii cu mulţimi
• Operaţii cu polinoame
• etc.