Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
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 l’Intelligenza 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 S - espressioni Liste Atomi Lista non vuota
Lista vuota Simboli Numeri Floating point Integer
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
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 cos’e’ l’apice 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 l’apice): (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 l’elemento inserito al primo posto (CONS ‘A ‘(B C)) (A B C) (CONS ‘A (CDR ‘(B C))) (A C)
12
Funzioni aritmetiche (+ 3.14 2.5) 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
14
Altre funzioni matematiche
(MAX 7 6 8) 8 (MIN 7 6 8) 6 (ABS -8) (EXPT 2 3) (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 l’operando è un atomo
LISTP verifica se l’operando è una lista NULL verifica se l’operando è 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 <nome_funzione> (<operando1> <operando2>…<operandoN>) (<corpo_della_funzione>) )
22
Esempio di definizione di funzione
(DEFUN Secondo (L) (CADR L)) Esempio: (Secondo ‘( A C D)) C
23
Espressioni condizionali: COND
Sintassi (COND (<espressione1> <azione1>) (<espressione2> <azione2>) … (<espressioneN> <azioneN>)) Semantica Se <espressione1>=T allora <azione1> altrimenti se <espressione2>=T allora <azione2> … altrimenti se <espressioneN>=T allora <azioneN>
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 sull’interprete
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.