Sunteți pe pagina 1din 3

Inteligen Artificial Introducere in LISP Laboratorul 1 : 1.

.Introducere in Limbajul Lisp Lansarea programului se poate face direct din run apeland executabilul lisp In Allegro CL 5.01 compilarea unui program Lisp se poate realiza atat prin scrierea codului direct de la linia de comanda, precum si prin incarcarea sa de pe un fisier extern Pentru scrierea pe ecran a unui sir de caractere se utilizeaza functia write string USER (1) : (write-string Hello,World) va afisa pe ecran string-ul cu si fara ghilimele; Functia de adunare + (implicita ) se utilizeaza in lisp in felul urmator: USER (2) : (+ 2 4) Rezultatul operatiei de adunare va fi afisat pe linia imediat urmatoare; Pentru a aduna un vector de dimensiune 5 : USER(3): (+ 50 20 23 1 9) 103 Operatia de impartire a 2 numere : USER(4): (/ 20 5) 4 Operatia de inmultire a 2 numere User(5): (* 20 5)

Astfel, vom defini prima functie care va afisa pe ecran un sir de carcactere (in-package :user) (defun hello() (write-string Hello World))

Structura de date fundamentala in limbajul LISP (List Processor) este Lista. Aceasta este delimitata prin paranteze. Deschiderea si inchiderea parantezelor denota inceputul si sfarsitul listei. O expresie poate avea valoare de adevar (diferita de NIL) sau poate fi evaluata ca falsa (NIL) Exercitiu Sa se realizeze functia recursiva de calcul a factorialului unui numar < 13. Sa se apeleze aceasta functie lisp.

(defun factorial (n) (if (= n 0) 1 (* n (factorial(- n 1))) ) )

(defun factorial (n) (cond ((= n 0) 1) (t (* n (factorial (- n 1 ))))) )

Sa se scrie in Lisp functia care implementeaza sirul lui Fibonacci si returneaza al n-lea numar din sir. Functia va fi recursiva. De recapitulat : iterativitate si recursivitate; tipuri de recursivitate; liste simplu- inlantuite

(defun fibo (n) (if ( or (= n 0) (= n 1)) 1 ( +(fibo (- n 2)) (fibo (- n 1))) ) )


In cazul ramificatiilor multiple se foloseste clauza cond. Aceaste este echivalentul lui Switch din C. Cand toate ramificatiile sunt evaluate si nu au valoare de adevar (au valoarea nil) atunci se trece la pasul urmator. Ramura default
x1 = 1, x2 = 1, xn = xn-1 + xn-2,

(defun fibo (n) ( cond (( = n 0) 1) ((= n 1) 1) (t ( + (fibo(- n 1)) (fibo(- n 2)) )) ))


Sa se scrie programul LISP care calculeaza valoarea polinomului Hermite Hn(x) ntr-un punct x dar si pentru n dat stiind ca:

H0(x)=1 H1(x)=2x Hn(x)=2xHn-1(x)-2(n-1)Hn-2(x), n>1


Functiile mai sus mentionate utilizeaza predicate logice. Acestea sunt AND OR si NOT

Sa se scrie o functie care compara 2 numere si returneaza 2 siruri de caractere. Daca primul numar este mai mare atunci va da un mesaj Primul numar este mai mare, in caz contrar Va da mesajul (Al doilea numar este mai mare)

(DEFUN COMPARA (X Y) (COND ((EQUAL X Y) "NUMERELE SUNT EGALE") ((< X Y) "PRIMUL NUMAR ESTE MAI MIC") ((> X Y) "PRIMUL NUMAR ESTE MAI MARE") ) )
Sa se realizeze programul Doctor care va afisa pe ecran ; - Pacientul e Okay daca variabila temperatura are valoarea 37 - Daca pacientul are intre 37 si 38 de grade se afiseaza mesajul Stare Subfebrila - Daca pacientul are 38 de grade, se afiseaza mesajul Ai febra - In caz contrar tuturor celor de mai sus se afiseaza mesajul Ia o aspirina!

(defun doctor (temper) (cond((< temper 37) (print Pacientul e OK) nil) ((< temper 38) ( print Stare subfebrila) nil) ((= temper 38) (print Ai febra) nil) (t ( print Ia o aspirina ) nil)))

S-ar putea să vă placă și