Inteligenţă Artificială
Inteligenţă Artificială
Curs 3: Lisp Valori multiple, mulimi, expresii logice, asociaii, lambda expresii i definiii de funcii, recursivitate
1 Valori multiple
!unciile floor, ceiling i values-list produc valori multiple Valorile multiple nu sunt liste de valori "xploatarea valorilor multiple: multiple-valuelist, multiple-value-call
Valori multiple
floor / ceiling
rotun#esc o valoare $n #os % sus
& 'floor () ( * & 'floor ( +) ( * +*****1 & 'floor (%3) * (%3 & 'ceiling () ( * & 'ceiling ( +) 3 ,* *++++++*& 'ceiling (%3) 1 ,1%3 & 'floor . 3) ( 1 & 'ceiling . 3) 3 ,(
values
& 'values /a /b 3) 0 1 3
Valori multiple
multiple-values-list
& 'multiple,value,list 'floor 2 3)) '1 1)
multiple-value-call
( 4ulimi
member
union
& 'union /'a b c) /'1 a ( b 3)) 'C 1 0 ( 1 3)
4ulimi
intersection
& 'intersection /'a b c) /'1 a ( b 3)) '1 0)
& 'union /''a 1) 'b () 'c 3)) /''a alp5a) 'c gamma) 'e epsilon)) :test 3/'lambda 'x :) 'e9l 'car x) 'car :)))) ''1 () '0 0L670) 'C ;0440) '" "6<IL=>))
intersection
!uncii logice
and
(and expr1 ... exprn)
evaluarea se oprete c?nd prima expr $ntoarce >IL@ altfel se $ntoarce valoarea ultimei expr
& 'set9 x *) * & 'and 'not 'Aerop x)) '% 1 x) ', x 1)) >IL
or
(or expr1 ... exprn)
!uncii condiionale
if
& 'if 'Aerop 'set9 x *)) CerrD '% 1 x)) CerrD
when
(when expr body)
& 'E5en 'oddp x) 'format t CimparD) 'F x 1))
unless
(unless expr body)
cond
& 'cond ''8 x *) CnegativD) ''& x *) CpoAitivD) 't Cegal cu *D))
2 !uncii c5irurgicale
nconc
modific toate argumentele 'list) cu excepia ultimului@ realiAeaA o list din toate elementele
& 'set9 x /'a b)) '0 1) & 'set9 : /'1 ()) '1 () & 'set9 A /'u v)) 'u v) & 'nconc x : A) '0 1 1 ( G V) &x '0 1 1 ( G V) &: '1 ( G V) &A 'G V)
!uncii c5irurgicale
rplaca
$nlocuiete car,ul primului argument cu valoarea celui de,al doilea
&x '0 1 C) & 'rplaca 'cdr x) /d) 'H C) &x '0 H C)
rpalcd
- Liste de asociaie
I Liste de perec5i c5eie,valoare
c5eie
valoare
c
alp5a
gamma
gamma
Liste de asociaie
I !uncii de creare
acons:
, copie lista vec5e , adaug pe prima poAiie noua perec5e de asociaie
& 'set9 l 'acons /a 1 nil)) ''0 1)) & 'acons /b ( l) ''1 () '0 1)) &l ''0 1))
pairlis:
Liste de asociaie
!uncii de acces
assoc: folosete c5eia pentru a identifica elementul rassoc: folosete data
& 'set9 l 'pairlis /'a b a) /'1 ( 3)) ''0 3) '1 () '0 1)) & 'assoc /a l) '0 3) & 'rassoc 1 l) '0 1) & 'rassoc ( l :test 3/&) '0 1)
J Hefiniii de funcii
I <intaxa:
(defun <nume (<lista-arg ) <corp )
I Bipuri de argumente:
K obligatorii K opionale '!optional) K rest '!rest) K c5eie '!"ey) K variabile auxiliare '!aux)
!uncii
"xemplu
'defun suma,mai,mare 'x : A) '& 'F x :) A)) & 'suma,mai,mare ( 2 -) B
6arametri
!optional
unele argumente pot fi omise, au valoare default argumentele de dup !optional sunt opionale 'implicit: nil)
'defun p5ilosop5 't5ing Loptional propert:) 'list t5ing /is propert:)) & 'p5ilosop5 /deat5) 'H"0B7 I< >IL) 'defun p5ilosop5 't5ing Loptional 'propert: /fun)) 'list t5ing /is propert:)) & 'p5ilosop5 /deat5) 'H"0B7 I< !G>) implicit: fun
6arametri
!rest
numr variabil de argumente $nainte de ultima variabil la apel, variabila va fi setat cu lista argumentelor care rm?n
'defun s9uare,all 'Lrest args) 'if 'null args) nil 'cons 'M 'first args) 'first args)) 's9uare,all 'cdr args)))))
6arametri
!"ey
toi parametrii de dup sunt opionali c?nd apelm funcia, aceti parametri vor fi identificai prin tagurile simbolice care le preced
'defun Oe:list 'a LOe: x : A) 'list a x : A)) & 'Oe:list 1 :: () '1 >IL ( >IL) & 'Oe:list 1 :: 3 :x () '1( 3 >IL)
!uncia apply
aplic o funcie asupra unei liste de argumente
& 'set9 f /F) F & 'appl: f /'1 ( 3)) J & 'appl: 3/min /'( ,J .)) ,J
funcall
& 'funcall 3/max 1 ( 3) 3 & 'set9 x () ( & 'funcall 'if '& x *) 3/max 3/min) 1 ( 3) 3
. Lambda expresii
(lambda (<var1 # <varn ) f1# fm)
<e utiliAeaA $n locul unui nume de funcie, $n contexte $n care se prefer declararea direct a corpului funciei unui apel al unei funcii anterior definite 0peluri:
((lambda (<var1 # <varn ) f1# fm) <arg1 # <argn ) (# $test %&(lambda#) #)
notaie de funcional
& ''lambda 'x :) '& x :)) 3 () B
Lambda,funcii recursive
I Construcia labels
asociaA un nume funciilor definite ca lambda,expresii
(labels (<specificatie-legare ') <apel ')
(<nume <parametri <corp )
& 'labels ''dot,product 'a b) 'if 'or 'null a) 'null b)) * 'F 'M 'car a) 'car b)) 'dot,product 'cdr a) 'cdr b)))))) 'dot,product /'1 ( 3) /'1* (* 3*))) 12*
P !uncii de coresponden
I transformri aplicate unei mulimi de obiecte 'global) I aplic o funcional asupra argumentelor I mapcar$ aplic o funcie asupra elementelor unor liste
numrul argumentelor = aritatea functionalei aritatea funcionalei (mapcar &f (f (f &l1 # &ln) e11 # en1 ) e1 e1( # en( ) e( # (f # # dimensiunea ieirii = lungimea listei minime
& 'mapcar /e9ual /'a 'b c) d e) /'b 'b c) f e 3)) '>IL B >IL B)
!uncii de coresponden
mapcar
& 'appl: 3/F 'mapcar 3/M /'1 ( 3) /'1* (* 3*))) 12* & 'set9 l 'pairlis /'4i5ai ;5erg5e >icolae) /'4isu ;5ita >icu)) ''>IC=L0" >ICG) ';7"=Q;7" ;7IB0) '4I70I 4I<G)) & 'mapcar 3/'lambda 'x) 'if 'null 'assoc x l)) x 'cdr 'assoc x l)))) /'4i5ai s,a intalnit cu 4ircea ca sa,l viAiteAe impreuna pe ;5eorg5e)) '4isu s,a intalnit cu 4ircea ca sa,l viAiteAe impreuna pe ;5ita)
!uncii de coresponden
maplist
funcionala este aplicat listelor i cdr,urilor succesive
numrul argumentelor = aritatea functionalei aritatea funcionalei (maplist (f (f # %&f &l1 l1 (cdr l1) # # # # &ln) l1 (cdr l1) ) e1 ) e( # dimensiune a ieirii = lungimea listei minime
& 'maplist 3/'lamba 'x) x) /'1 ( 3 2)) ''1 ( 3 2) '( 3 2) '3 2) '2))
!uncii de coresponden
"xemple
& 'mapcar 3/'lambda 'x) 'cons /alp5a x)) 'maplist 3/lambda'x) c) /'1 ( 3 2))) ''0L670 1 ( 3 2) '0L670 ( 3 2) '0L670 3 2) '0L670 2))
P Qecursivitate
I <crierea unei funcii recursive
K $ncep prin definirea condiiei de terminare a recursiei K continui cu apelul recursiv
!uncii recursive
"xemplu: member
'defun membru 'o l) 'if 'null l) nil 'if 'e9l 'car l) o) l 'membru o 'cdr l))))) & 'membru /b /'a b c)) '1 C)
>on coada,rec
'defun lungime 'lst) 'if 'null lst) * '1F 'lungime 'cdr lst)))))
coada,rec
param acumulator 'defun lungimep 'lst acc) 'if 'null lst) acc 'lungimep 'cdr lst) '1F acc))))