1 / 27

LISP

LISP. Lisp. Ispirato da funzioni ricorsive e lambda calcolo Inventato da John McCarthy Progenitore dei linguaggi di programmazione funzionale. LISP: LISt Processor. LISP è stato disegnato originariamente per l’Intelligenza Artificiale

jereni
Télécharger la présentation

LISP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • (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 ‘(1 2 3 4))) • 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 (/ 14.0 4.0) Divisione tra reali 3.5 (/ (FLOAT 14) (FLOAT 4)) Equivalente al precedente 3.5

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

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

  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

More Related