Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

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

transfera valori multiple unui apel de functie


& 'multiple,value,call 3/list 1 'ceiling . 3) -) '1 3 ,( -)

( 4ulimi

member

o s,expresie aparine unei liste


& 'member /alp5a /'a alp5a b alp5a)) '0L670 1 0L670) &'member 3 /'1 ( 3 2 -) :test 3/8) '2 -) & 'member /'3 2) /'1 ( '3 2) -) :test 3/e9ual) ''3 2) -)

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

''C 3) '0 1))

3 !uncii logice i condiionale


and or not if when unless cond

!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)

not: similar ca null


& 'not nil) B

!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

modific argumentele incf / decf


& 'set9 x 1) 1 & 'incf x () 3 veAi diferena 1+, 1-

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

&x '0 1 C) & 'rplacd 'cdr x) /d) '1 H) &x '0 1 H)

- 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:

, c5eile $ntr,o list, datele $n alta


& 'pairlis /'a b) /'1 ()) ''1 () '0 1))

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)))))

'appl: 3Ns9uare,all 'cdr args)) & 's9uare,all 1 ( 3 2 -) '1 2 + 1J (-)

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)

!orme de apelare a altor funcii

!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

e1" # en" ) e"

& '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

(f (cdr(#(cdr l1)#) # (cdr(#(cdr l1)#) ) e"

& '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

I Cum utiliAeA lambda expresiile $n apeluri recursiveR


K $mpreun cu declaraii labels

I !uncii coad,recursive dup apel, funcia nu mai are nimic de fcut

!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)

Qecursivitate K parametru acumulator

>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))))

You might also like