La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

LISP. Lisp Ispirato da funzioni ricorsive e lambda calcolo Inventato da John McCarthy Progenitore dei linguaggi di programmazione funzionale.

Presentazioni simili


Presentazione sul tema: "LISP. Lisp Ispirato da funzioni ricorsive e lambda calcolo Inventato da John McCarthy Progenitore dei linguaggi di programmazione funzionale."— Transcript della presentazione:

1 LISP

2 Lisp Ispirato da funzioni ricorsive e lambda calcolo Inventato da John McCarthy Progenitore dei linguaggi di programmazione funzionale

3 LISP: LISt Processor LISP è stato disegnato originariamente per lIntelligenza Artificiale Ha vari dialetti: Common Lisp, FranzLisp, AutoLisp, etc. E basato su un approccio ricorsivo ed incrementale Prevalentemente utilizzato mediante interpreti

4 LISP: Stile interattivo Utente: definisce funzioni o richiede un calcolo Interprete: accetta la definizione o esegue il calcolo

5 Tipi di dato in Lisp Liste S - espressioni Floating pointInteger Lista non vuota Lista vuota Atomi SimboliNumeri

6 Esempi Lista vuota: () anche chiamata NIL Atomo: ALPHA Lista (piatta): ( A B D ) Lista: ( A B ( D E ) A) Intero: 3 Floating point: 3.14

7 Liste Liste: –Una lista può contenere come elementi atomi o altre liste. –Gli elementi sono racchiusi tra parentesi. –Una lista può essere vuota.

8 Operazioni su liste CAR : restituisce il primo elemento di una lista –(CAR (5 2 9)) 5 CDR : restituisce la lista senza il primo elemento. –(CDR (5 2 9)) (2 9) Possiamo mescolare CAR e CDR in ogni combinazione.

9 Esempi: (CAR (CDR L)) = (CADR L) Es. : (CAR (CDR ( ))) 2 (CDR (CAR L)) = (CDAR L) Es. : (CDR (CAR ((1 2) (2 3) (3 4) (4 5)))) (2) CAR restituisce un ELEMENTO (atomo o lista) CDR restituisce una LISTA (CAR NIL) = (CDR NIL) = NIL Che cose lapice che precede le liste di numeri?

10 QUOTE () Notazione prefissa: il primo elemento di una lista e la funzione, gli altri elementi sono gli operandi. Come distinguo (+ 1 1) (= somma dei numeri 1 e 1) dalla lista costituita dai simboli +, 1 e 1? Soluzione: operatore QUOTE (abbreviato con lapice): (QUOTE (1 2 3)) = (1 2 3) La lista (1 2 3) non viene valutata (= non si cerca una funzione 1 da applicare a 2 e 3)

11 Altre operazioni su liste: CONS CONS: Accetta un elemento e una lista e restituisce la lista con lelemento inserito al primo posto (CONS A (B C)) (A B C) (CONS A (CDR (B C))) (A C)

12 Funzioni aritmetiche ( ) 5.64 (+ 2 (+ 3 6)) 11 (* 6 4) 24 (/ 25 5) 5

13 Float e Integer (/ 27 9) Divisione tra interi con risultato intero 3 (/ ) Divisione tra reali 3.5 (/ (FLOAT 14) (FLOAT 4)) Equivalente al precedente 3.5

14 Altre funzioni matematiche (MAX 7 6 8) 8 (MIN 7 6 8) 6 (ABS -8) 8 (EXPT 2 3) 8 (SQRT 25) 5 (ROUND 1.25) 1 (ROUND 1.75) 2 X intero: X=(ROUND (FLOAT X))

15 Altre funzioni matematiche (TRUNCATE 14 4)Divisione tra interi 3 (REM 14 4)REMainder: resto 2 X,Y interi; Y diverso da 0: (+ (* (TRUNCATE X Y) Y) (REM X Y)=X

16 Funzioni predefinite su liste: LIST LIST prende n operandi e restituisce la lista i cui elementi sono gli n operandi (LIST A) (A) (LIST A B) (A B) (LIST A (CDR (A B C))) (A (B C))

17 Funzioni predefinite su liste: APPEND APPEND prende n liste e restituisce la lista composta dagli elementi delle n liste (APPEND (1 2) (3 4)) ( ) (APPEND (1 2) (CDR (1 2))) (1 2 CDR (1 2))

18 Predicati True/False In Lisp la lista vuota (NIL) è False; tutto il resto è True. Per indicare esplicitamente il valore True si usa T.

19 Esempi di predicati ATOM verifica se loperando è un atomo LISTP verifica se loperando è una lista NULL verifica se loperando è una lista vuota EQ verifica se gli operandi (S-espressioni) sono uguali Oltre a questi ci sono, tra gli altri, gli operatori relazionali: =, >,< che operano su numeri

20 Numero di operandi N: +,*,-,\,MAX, MIN, APPEND, LIST, AND 2: TRUNCATE, REM, EXPT, EQ, =, >,< 1: ABS, SQRT, FLOAT, NOT, NULL, ATOM, LISTP

21 Definizione di funzioni: DEFUN Sintassi: (DEFUN ( … ) ( ) )

22 Esempio di definizione di funzione (DEFUN Secondo (L) (CADR L)) Esempio: (Secondo ( A C D)) C

23 Espressioni condizionali: COND Sintassi (COND ( ) ( ) … ( ))

24 Esempio: funzione PARI PARI(X)= T se X è pari NIL altrimenti (DEFUN PARI (X) (COND ((= (REM X 2) 0) T) (T NIL)))

25 Ricursione APPARTIENE(A,L)= T se A appartiene alla lista L NIL altrimenti (DEFUN APPARTIENE (A L) (COND ((NULL L) NIL) ((EQ A (CAR L)) T) (T (APPARTIENE A (CDR L)) ))) (APPARTIENE 'A '(A B C)) T

26 Altri esempi (DEFUN UNIONE (L1 L2) (COND((NULL L1) L2) ((APPARTIENE (CAR L1) L2) (UNIONE (CDR L1) L2)) (T (UNIONE (CDR L1) (CONS (CAR L1) L2))))) (UNIONE '(A B C) '(C D E)) (B A C D E)

27 Cenni sullinterprete Valutazione di S-espressioni: Atomi: la valutazione di numeri (simboli) restituisce il numero (simbolo) stesso. Liste: vengono valutati tutti gli elementi di primo livello (a meno di QUOTE) –Il primo elemento è sempre un nome di funzione; viene valutato il corpo della funzione corrispondente. –Tutti gli altri elementi vengono valutati e i risultati corrispondenti vengono usati come argomenti della funzione


Scaricare ppt "LISP. Lisp Ispirato da funzioni ricorsive e lambda calcolo Inventato da John McCarthy Progenitore dei linguaggi di programmazione funzionale."

Presentazioni simili


Annunci Google