Lisp

Published on February 2017 | Categories: Documents | Downloads: 58 | Comments: 0 | Views: 395
of 3
Download PDF   Embed   Report

Comments

Content

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

1

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,

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)=2—x Hn(x)=2—x—Hn-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)))

3

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close