100 likes | 217 Vues
Inteligenţă artificială. Curs 4: Lisp Valori multiple, expresii logice, asociaţii, lambda expresii şi definiţii de funcţii, operaţii cu mulţimi. Valori multiple. Funcţiile floor , ceiling şi values-list produc valori multiple. Valorile multiple nu sunt liste de valori.
E N D
Inteligenţă artificială Curs4: Lisp Valori multiple, expresii logice, asociaţii, lambda expresii şi definiţii de funcţii, operaţii cu mulţimi
Valori multiple Funcţiile floor, ceiling şi values-listproduc valori multiple. Valorile multiple nu sunt liste de valori. Exploatarea valorilor multiple: multiple-value-list, multiple-value-call
Funcţii logice şi condiţionale and or not if when unless cond
Liste de asociaţie • Liste de perechi cheie-valoare cheie valoare c a alpha b gamma c gamma
Liste de asociaţie • Funcţii de creare: acons, pairlis • Funcţii de acces: assoc, rassoc
Definiţii de funcţii • Sintaxa: (defun <nume> (<lista-arg>) <corp>) • Tipuri de argumente: • obligatorii • opţionale (&optional) • rest (&rest) • cheie (&key) • variabile auxiliare (&aux)
Lambda expresii (lambda (<var1>… <varn>) f1… fm) Se utilizează în locul unui nume de funcţie, în contexte în care se preferă declararea directă a corpului funcţiei unui apel al unei funcţii anterior definite. Apeluri: ((lambda (<var1>… <varn>) f1… fm) <arg1>… <argn>) (…:test #’(lambda…)…) notaţie de funcţională
Exemple de utilizare a lambda expresiilor • Pentru calcularea o singură dată a subexpresiilor Exemplu: calculul ecuaţiei de ordinul 2
Exemple de utilizare a lambda expresiilor • În apeluri ce necesită funcţionale: member, union, intersection Exemplu: Reuniunea/intersecţia unor mulţimi de nume, indiferent de limba în care sunt scrise.
Recursivitate • Scrierea unei funcţii recursive • încep prin definirea condiţiei de terminare a recursiei • continui cu apelul recursiv • Cum utilizez lambda expresiilor în apeluri recursive? • împreună cu declaraţii labels • Funcţii coadă-recursive Exemple: lung, factorial, numărul atomilor dintr-o listă indiferent de nivelul de paranteze