IL LINGUAGGIO LISP. Marco Broglia

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "IL LINGUAGGIO LISP. Marco Broglia"

Transcript

1 IL LINGUAGGIO LISP Marco Broglia

2 Lisp: carta d identità ci.1 Carta d Identità Nome: Lisp (List Processor) Nato il: autunno 1958 Genere: interprete Padre: John McCarthy Incubazione: IBM 704 Segni particolari: notazione prefissa: ( ) utilizzo di (((((( parentesi )))))) Pseudo-acronimi: Lots of Irritating Superfluous Parentheses Lost In a Sea of Parentheses

3 IL LINGUAGGIO LISP welcome

4 Lisp: welcome welcome.1 (quote ) L operatore quote, abbreviato spesso con il simbolo quote ( ), accetta un solo argomento e lo restituisce senza valutarlo: > (quote (+ 1 2)) (+ 1 2) > (* 3 4) (* 3 4) Esercizio [w.1] Valutare > (the list (a b c) has (+ 1 2) elements) Soluzione [w.1] (THE LIST (A B C) HAS (+ 1 2) ELEMENTS) quote object object

5 Lisp: welcome welcome.2 (list (cons l (cons i (s t)))) Le liste vengono costruite con l operatore cons oppure con l operatore list: > (cons a (b c d)) (A B C D) > (cons a (cons b nil)) (A B) > (cons (a) (b)) ((A) B) > (cons nil (a)) (NIL A) > (list a b) (A B) > (list my (* 1 2) "Sons") (MY 2 "Sons") La lista vuota è rappresentata da nil: > () NIL > nil NIL cons object1 object2 ( object1. object2 ) list object* ( object* )

6 Lisp: welcome welcome.3 (1 2 3) Esercizio [w.2] Fornire tre diverse cons-espressioni che restituiscono (1 2 3). Soluzione [w.2] 1. (cons 1 (2 3)) 2. (cons 1 (cons 2 (3))) 3. (cons 1 (cons 2 (cons 3 nil)))

7 Lisp: welcome welcome.4 append vs cons vs list Esercizio [w.3] Valutare le seguenti espressioni: 1. (cons (i am) (a cons)) 2. (list (i am) (a list)) 3. (append (i am) (an append)) Soluzione [w.3] 1. ((I AM) A CONS) 2. ((I AM) (A LIST)) 3. (I AM AN APPEND) append list* ( elements of list* )

8 Lisp: welcome welcome.5 (list (car (c d r)) (car (cdr (c a r))) r) Le funzioni primitive per l estrazione degli elementi di una lista sono car (Contents of the Address part of Register number) e cdr (Contents of the Decrement part of Register number): > (car (a b c)) A > (cdr (a b c)) (B C) > (car (cdr (cdr (a b c d)))) C > (caddr (a b c d)) C car cons first object in cons cdr cons second object in cons cadr list car (cdr list)

9 Lisp: welcome welcome.6 myfourth and myreverse Esercizio [w.4] Sia lst la lista (a b c d e). Utilizzando solo le funzioni car e cdr, fornire un espressione che estragga il quarto elemento. Soluzione [w.4] > (car (cdr (cdr (cdr lst)))) D > (fourth lst) D Esercizio [w.5] Sia lst la lista (a b c). Utilizzando solo le funzioni c[ad]*r e cons, invertire la lista. Soluzione [w.5] > (cons (caddr lst) (cons (cadr lst) (cons (car lst) nil))) (C B A) > (reverse lst) (C B A)

10 Lisp: welcome welcome.7 let ((me see)) L operatore di assegnamento più generale è setf: > (setf lst (1 2 3)) (1 2 3) > (setf (car lst) 4) 4 > lst (4 2 3) L operatore let viene utilizzato per definire variabili locali: > (let ((a 1) (b 2)) (+ a b)) 3 > (let ((n 1)) (setf n 2) n) 2 > n error: n unbound setf (object value)* ( object value )* let ( ( var value )* ) body ( var value )* body

11 Lisp: welcome welcome.8 (if cond ition) Il condizionale più semplice è l operatore if: > (if (oddp (random 10)) odd even) ODD or EVEN > (setf e (exp 1)) > (if (< e pi) (/ pi e)) Il terzo argomento è opzionale (default: nil). Il condizionale più classico è l operatore cond: > (setf googol (expt )) (1 seguito da 100 zeri) > (cond ((= (mod googol 3) 1) 3k+1) ((= (mod googol 3) 2) 3k-1) (t 3k)) 3K+1 if test expr1 expr2 if (test) expr1 else expr2 cond ( ( test expr )* ) first expr with true test

12 Lisp: welcome welcome.9 (and t (not false)) Il simbolo t rappresenta il valore vero, nil il valore falso: > (and t (+ 1 2)) 3 > (not 3) NIL Le funzioni che valutano la verità o la falsità di un espressione sono dette predicati: > (listp (a b c)) T > (list (numberp 1) (atom ()) (listp 27) (consp (a b))) (T T NIL T) and expr* if (any expr = nil) nil else last expr or expr* if (all expr* = nil) nil else first true expr not object if (object = nil) t else nil null object if (object = nil) t else nil listp object if (object is a list) t else nil

13 Lisp: welcome welcome.10 (and (or (not (null nil)))) Esercizio [w.6] Valutare le seguenti espressioni: 1. (list 1 (+ 2 3)) 2. (if (listp 1) (+ 1 2) (+ 3 4)) 3. (list (and (listp 3) t) (+ 1 2)) 4. (list (and 0) (null nil) (not nil) (not (listp nil))) 5. il titolo Soluzione [w.6] 1. (1 5) (NIL 3) 4. (0 T T NIL) 5. NIL

14 Lisp: welcome welcome.11 (f (u (n (z (i (o (n i))))))) La definizione di nuove funzioni avviene tramite la funzione defun: > (defun mythird (lst) (car (cdr (cdr lst)))) MYTHIRD > (mythird (a b c d)) C Esercizio [w.7] Definire la funzione 3> che, data una lista di 3 valori lst, verifica se essi sono in ordine strettamente decrescente. Soluzione [w.7] > (defun 3> (lst) (and (> (car lst) (cadr lst)) (> (cadr lst) (caddr lst)))) 3> > (list (3> (3 2 1)) (3> (1 2 3)) (3> (1 1 0))) (T NIL NIL) defun fname ( parameters ) body fname

15 Lisp: welcome welcome.12 max2 Esercizio [w.8] Definire la funzione max2 che restituisce il maggiore tra due argomenti. Soluzione [w.8] > (defun max2 (x y) (if (> x y) x y)) MAX2 > (setf e (exp 1)) > pi > (max2 (expt e pi) (expt pi e)) > (expt pi e)

16 Lisp: welcome welcome.13 (r (e (c (u (r (s i o n)))))) Molto naturale in Lisp, la ricorsione rappresenta uno dei più eleganti stili di programmazione a cui si riferiscono i seguenti due classici. La funzione fattoriale: { n! = viene spesso implementata: 1 n = 0 n (n 1)! n >= 1 > (defun! (n) (if (= n 0) 1 (* n (! (- n 1)))))! > (! 10) > (! 100) (158 cifre)

17 Lisp: welcome welcome.14 La funzione di Fibonacci: F n = viene spesso implementata: 0 n = 0 1 n = 1 F n 1 + F n 2 n > 1 > (defun fib (n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))) FIB > (fib 10) 55 > (fib 100)

18 Lisp: welcome welcome Esercizio [w.9] Il più piccolo numero di Fibonacci contenente tutte le cifre da 0 a 9 è F 74 : > (fib 74) Utilizzando la precedente definizione della funzione fib, quante volte essa viene invocata per calcolare F 74? Soluzione [w.9] Sia C(n) il numero di invocazioni della funzione fib con argomento n. n F n C(n) Si ha C(n) = 2F n+1 1, dunque fib viene invocata volte. C(74) = 2F 75 1 =

19 Lisp: welcome welcome.16 $ = super! Esercizio [w.10] Implementare in modo ricorsivo la funzione superfattoriale così definita: n n$ = i i! = 1! 2! n! Soluzione [w.10] > (defun $ (n) (if (= n 1) (! 1) (* (! n) ($ (- n 1))))) $ > ($ 10) (28 cifre) > ($ 100) (6941 cifre)

20 Lisp: welcome welcome.17 λ expression Una λ expression, detta anche anonymous function, definisce una funzione senza associarla ad un nome. Sintatticamente è una lista formata da tre parti: il simbolo lambda, una lista di parametri e il corpo della funzione. Ad esempio, l espressione (lambda (x) (* x x)) definisce la funzione che calcola il quadrato: > ((lambda (x) (* x x)) ) Esercizio [w.11] Definire la λ expression che determina il minore tra due numeri. Soluzione [w.11] (lambda (x y) (if (< x y) x y))

21 Lisp: welcome welcome.18 f(x) = g(h(x)) È possibile passare funzioni come argomenti ad altre funzioni: > (apply # + ( )) 12 > (mapcar # oddp ( )) (T T NIL T T) > (mapcar # + ( ) ( )) ( ) oppure definire funzioni che restituiscono funzioni come valori di ritorno: > (defun addn (n) # (lambda (x) (+ x n))) ADDN > (setf add10 (addn 10)) internals > (mapcar add10 (1 2 3)) ( ) apply f ( args ) ( f args ) mapcar f ( list )* ( ( f elem 1 )... ( f elem n ) ) lambda ( parameters ) body function

22 IL LINGUAGGIO LISP esercizi semplici

23 Lisp: exercises exer.1 lisp-equazioni Esercizio [e.1] Risolvere le seguenti lisp-equazioni in x: > (car (x (cdr (a (b c) d)))) B > (x 13 (/ 1 0)) 13 > (x # list (1 nil)) (1 NIL) Soluzione [e.1] 1. x = car 2. x = or 3. x = apply

24 Lisp: exercises exer.2 la funzione che non funziona Esercizio [e.2] Un giovane Lisper sta provando a scrivere la funzione mysum che somma tutti gli elementi non nil di una lista. Egli ne scrive due diverse versioni, ma entrambe non risultano funzionanti. Dove sta sbagliando? Riusciamo ad aiutarlo? (defun mysum1 (lst) (remove nil lst) (apply # + lst)) (defun mysum2 (lst) (let ((x (car lst))) (if (null x) (mysum2 (cdr lst)) (+ x (mysum2 (cdr lst)))))) remove object list list without object

25 Lisp: exercises exer.3 la funzione che ora funziona Soluzione [e.2] 1. la funzione remove non modifica la lista originaria > lst (1 2 NIL 3) > (remove nil lst) (1 2 3) > lst (1 2 NIL 3) > (mysum1 (1 2 () 3)) error: +: operand 3 and NIL 2. nella condizione di uscita, in entrambi i casi viene invocata la funzione ricorsivamente, provocando un loop infinito

26 Lisp: exercises exer.4 Possiamo correggere i due errori così: > (defun mysum1 (lst) (apply # + (remove nil lst))) MYSUM1 > (defun mysum2 (lst) (let ((x (car lst))) (cond ((null lst) 0) ((null x) (mysum2 (cdr lst))) (t (+ x (mysum2 (cdr lst))))))) MYSUM2

27 IL LINGUAGGIO LISP esercizi: (le liste)

28 Lisp: exercises exer.6 mylast Esercizio [e.3] Definire la funzione mylast che, data una lista lst, restituisce l ultimo elemento. > (mylast (a b c d)) D > (mylast (a b (c (d)))) (C (D)) > (mylast ()) NIL > (last (a b (c (d)))) ((C (D))) > (car (last (a b (c (d))))) (C (D)) Soluzione [e.3] > (defun mylast (lst) (cond ((null (cdr lst)) (car lst)) (t (mylast (cdr lst))))) MYLAST

29 Lisp: exercises exer.7 presente? Esercizio [e.4] Definire il predicato presentp che determina se un atomo a compare in una lista, a qualsiasi livello. Confrontare il predicato presentp con la funzione predefinita member. > (setf lst1 (1 2 3) lst2 ((1) 2 (3))) ((1) 2 (3)) > (list (member 1 ()) (member 1 lst1) (member 1 lst2)) (NIL (1 2 3) NIL) member object list sublist starting with object

30 Lisp: exercises exer.8 presente! Soluzione [e.4] > (defun presentp (a lst) (cond ((atom lst) (eql a lst)) (t (or (presentp a (car lst)) (presentp a (cdr lst)))))) PRESENTP > (setf lst1 (1 2 3) lst2 ((1) 2 (3))) ((1) 2 (3)) > (list (member 1 ()) (member 1 lst1) (member 1 lst2)) (NIL (1 2 3) NIL) > (list (presentp 1 ()) (presentp 1 lst1) (presentp 1 lst2)) (NIL T T)

31 Lisp: exercises exer.9 lol Esercizio [e.5] Definire la funzione lol che, data una lista lst, determina se contiene liste. > (lol (1 2 3)) NIL > (lol (1 () 2 3)) T > (lol (())) T Soluzione [e.5] > (defun lol (lst) (cond ((null lst) nil) ((listp (car lst)) t) (t (lol (cdr lst))))) LOL

32 Lisp: exercises exer.10 nlol Esercizio [e.6] Definire la funzione nlol che, data una lista lst, conta le liste presenti al suo interno. > (nlol (1 2 3)) 0 > (nlol (1 () (2))) 2 > (nlol (())) 1 Soluzione [e.6] > (defun nlol (lst) (cond ((null lst) 0) ((listp (car lst)) (+ 1 (nlol (cdr lst)))) (t (nlol (cdr lst))))) NLOL

33 Lisp: exercises exer.11 nlol-r Esercizio [e.7] Definire la funzione nlol-r che, data una lista lst, conta il numero di liste presenti al suo interno, a qualsiasi livello. > (nlol-r (1 2 3)) 0 > (nlol-r (1 () ((2)))) 3 > (nlol-r ((()))) 2 Soluzione [e.7] > (defun nlol-r (lst) (cond ((null lst) 0) ((listp (car lst)) (+ 1 (nlol-r (car lst)) (nlol-r (cdr lst)))) (t (nlol-r (cdr lst))))) NLOL-R

34 Lisp: exercises exer.12 sum-r Esercizio [e.8] Definire la funzione sum-r che, data una lista lst, somma tutti i numeri presenti, a qualsiasi livello. > (sum-r ((1 (a)) 2 (3 b (() (4))))) 10 > (sum-r ()) 0 Soluzione [e.8] > (defun sum-r (lst) (cond ((atom lst) (if (numberp lst) lst 0)) (t (+ (sum-r (car lst)) (sum-r (cdr lst)))))) SUM-R

35 Lisp: exercises exer.13 rmn Esercizio [e.9] Definire la funzione rmn che, data una lista lst, rimuove tutti i numeri presenti, a qualsiasi livello. > (rmn (a 5 (c) (((4))) e ())) (A (C) ((NIL)) E NIL) > (rmn (1)) NIL > (rmn ()) NIL > (rmn (())) (NIL) Soluzione [e.9] > (defun rmn (lst) (cond ((null lst) nil) ((numberp (car lst)) (rmn (cdr lst))) ((atom (car lst)) (cons (car lst) (rmn (cdr lst)))) (t (cons (rmn (car lst)) (rmn (cdr lst)))))) RMN

36 Lisp: exercises exer.14 rms Esercizio [e.10] Definire la funzione rms che, data una lista lst, rimuove tutti gli atomi non numerici presenti, a qualsiasi livello. > (rms (a 5 (c) (((4))) e ())) (5 NIL (((4))) NIL) > (rms (1)) (1) > (rms ()) NIL > (rms (())) (NIL) Soluzione [e.10] > (defun rms (lst) (cond ((null lst) nil) ((listp (car lst)) (cons (rms (car lst)) (rms (cdr lst)))) ((numberp (car lst)) (cons (car lst) (rms (cdr lst)))) (t (rms (cdr lst))))) RMS

37 Lisp: exercises exer.15 verym Esercizio [e.11] Definire la funzione myrev che, data una lista lst, inverte l ordine degli elementi. > (myrev lst) inverte l ordine degli elementi della lista lst > (myrev (a c e t o n e)) (E N O T E C A) > (myrev (a (b (c)) ())) (NIL (B (C)) A) > (myrev ()) NIL > (myrev (myrev (l i v e))) (L I V E) Soluzione [e.11] > (defun myrev (lst) (cond ((atom lst) nil) (t (append (myrev (cdr lst)) (list (car lst)))))) MYREV

38 Lisp: exercises exer.16 very myrev Esercizio [e.12] Definire la funzione myrev-r che, data una lista lst, inverte l ordine degli elementi, a qualsiasi livello. > (myrev-r lst) inverte l ordine degli elementi di qualsiasi livello della lista lst > (myrev-r (a (b (c)) ())) (NIL ((C) B) A) > (myrev-r ()) NIL > (myrev-r (myrev (e s (t a) t o))) (E S (A T) T O) Soluzione [e.12] > (defun myrev-r (lst) (cond ((atom lst) lst) (t (append (myrev-r (cdr lst)) (list (myrev-r (car lst))))))) MYREV-R

39 Lisp: exercises exer.17 prodotto cartesiano Esercizio [e.13] Definire la funzione cart che, date due liste v1 e v2, ne calcola il prodotto cartesiano. > (cart (a b c) (1 2)) ((A 1) (A 2) (B 1) (B 2) (C 1) (C 2)) Soluzione [e.13] > (defun distl (x v) (cond ((null v) nil) (t (cons (list x (car v)) (distl x (cdr v)))))) DISTL > (distl a (1 2 3)) ((A 1) (A 2) (A 3)) > (defun cart (v1 v2) (cond ((null v1) nil) (t (append (distl (car v1) v2) (cart (cdr v1) v2))))) CART

40 IL LINGUAGGIO LISP esercizi... misteriosi

41 Lisp: exercises exer.19 what? Esercizio [e.14] Descrivere il comportamento delle seguenti funzioni e valutare il risultato della loro invocazione con l argomento (a 5 (c) (((4))) e ()) (defun what1 (x) (cond ((null x) 0) ((listp (car x)) (+ 1 (what1 (cdr x)))) (t (what1 (cdr x))))) (defun what2 (x) (cond ((null x) 0) ((numberp (car x)) (+ 1 (what2 (cdr x)))) (t (what2 (cdr x)))))

42 Lisp: exercises exer.20 that! Soluzione [e.14] 1. la funzione what1 conta il numero di liste presenti nella lista x al primo livello > (what1 (a 5 (c) (((4))) e ())) 3 2. la funzione what2 conta i numeri presenti nella lista x al primo livello > (what2 (a 5 (c) (((4))) e ())) 1

43 Lisp: exercises exer.21 an odd mystery Esercizio [e.15] Descrivere il comportamento delle seguenti funzioni: (defun odd (x) (cond ((null x) nil) ((atom x) x) (t (cons (odd (car x)) (odd (cdr x)))))) (defun mystery (x) (cond ((null x) 1) ((atom x) 0) (t (max (+ (mystery (car x)) 1) (mystery (cdr x)))))) Soluzione [e.15] 1. la funzione odd ritorna il proprio input 2. la funzione mystery calcola la profondità di x

44 Lisp: exercises exer.22 mysteries Esercizio [e.16] Descrivere il comportamento delle seguenti funzioni: (defun mystery1 (x) (and (not (null x)) (or (null (car x)) (mistery1 (cdr x))))) (defun mystery2 (x y) (if (null y) nil (if (eql x (car y)) 0 (let ((z (mystery2 x (cdr y)))) (and z (+ z 1)))))) Soluzione [e.16] 1. la funzione mistery1 determina se x contiene elementi nulli al primo livello 2. la funzione mystery2 ritorna la posizione di x nella lista y al primo livello

45 IL LINGUAGGIO LISP esercizi... efficienti

46 Lisp: exercises exer.24 fastfib Esercizio [e.17] La funzione di Fibonacci viene spesso implementata come segue: (defun fib (n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2))))) Individuare il problema principale di efficienza e definire la funzione fastfib, più efficiente. Soluzione [e.17] > (defun fib1 (fib fib+1 m) (if (= m 0) fib (fib1 fib+1 (+ fib fib+1) (- m 1)))) FIB1 > (defun fastfib (n) (fib1 0 1 n)) FASTFIB > (fastfib 10) 55 > (fastfib 100)

47 Lisp: exercises exer.25 fast$? Esercizio [e.18] n$ = La funzione superfattoriale, n i! = 1! 2! n! viene spesso implementata come segue: > (defun $ (n) (if (= n 1) (! 1) (* (! n) ($ (- n 1))))) $ i Individuare il problema principale di efficienza e definire la funzione fast$, più efficiente.

48 Lisp: exercises exer.26 fast$ Soluzione [e.18] La funzione $ invoca n volte la funzione!, con valori compresi tra 1 e n, eseguendo così più volte gli stessi prodotti. Considerando che (n + 1)! = n! (n + 1) (n + 1)$ = n$ (n + 1)! si può utilizzare lo schema seguente: > (defun $1 (k k! $k m) (if (= m 0) $k (let ((k+1! (* k! (+ k 1)))) ($1 (+ k 1) k+1! (* $k k+1!) (- m 1))))) $1 > (defun fast$ (n) ($ n)) FAST$

49 Lisp: exercises exer.27 la funzione di Ackermann La funzione di Ackermann è la più semplice funzione (Turing) computabile (ricorsiva) non primitiva ricorsiva: y + 1 x = 0 A(x, y) = A(x 1, 1) x > 0, y = 0 A(x 1, A(x, y 1)) x > 0, y > 0 x, y ?

50 Lisp: exercises exer.28 ack Esercizio [e.19] Definire la funzione ack che calcola la funzione di Ackermann. Soluzione [e.19] > (defun ack (x y) (cond ((= x 0) (+ y 1)) ((= y 0) (ack (- x 1) 1)) (t (ack (- x 1) (ack x (- y 1)))))) ACK > (ack 0 10) 11 > (ack 1 10) 12 > (ack 2 10) 23 > (ack 3 10) 8189 > (ack 4 1) stack overflow

51 IL LINGUAGGIO LISP esercizi: esercizi

52 Lisp: exercises exer.30 Willard Van Orman Quine Filosofo americano, analitico e logico, studiò in modo approfondito le tecniche dell autoreferenza. Un quine è un (meta)programma che produce in output il codice di cui è composto. Esercizio [e.20] Definire una funzione quine. Soluzione [e.20] > ((lambda (x) (list x (list quote x))) (lambda (x) (list x (list quote x)))) ((LAMBDA (X) (LIST X (LIST QUOTE X))) (LAMBDA (X) (LIST X (LIST QUOTE X)))) La λ expression ha argomento (lambda (x) (list x (list quote x))) e restituisce una lista formata da due elementi: 1. il primo è l argomento x 2. il secondo è: (list quote x) (list (quote quote) x) (quote x) x

Fondamenti dell informatica

Fondamenti dell informatica Fondamenti dell informatica LISP Rosario Culmone rosario.culmone@unicam.it 4/4/2008 UNICAM - p. 1/23 Il linguaggio di programmazione LISP Ispirato dalle funzioni ricorsive, dal lambda calcolo e dagli schemi

Dettagli

Brevissima introduzione al Lisp

Brevissima introduzione al Lisp Brevissima introduzione al Lisp Versione preliminare Giorgio Ausiello, Luigi Laura May 16, 2001 Queste pagine costituiscono un riferimento per gli studenti del corso di Informatica Teorica e non hanno

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 5 Alberto Ceselli alberto.ceselli@unimi.it Università degli Studi di Milano 12 Marzo 2013 Le funzioni sono oggetti di prima classe in Scheme In Scheme le funzioni

Dettagli

Programmazione Funzionale

Programmazione Funzionale Programmazione Funzionale LP imperativi: apparenza simile modello di progettazione = macchina fisica Famiglia dei LP imperativi = progressivo miglioramento del FORTRAN Obiezione: pesante aderenza dei LP

Dettagli

Esempio: rappresentare gli insiemi

Esempio: rappresentare gli insiemi Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci

Dettagli

TABELLA OPERATORI ARITMETICI

TABELLA OPERATORI ARITMETICI ARITMETICA E RICORSIONE Non esiste, in logica, alcun meccanismo per la valutazione di funzioni, operazione fondamentale in un linguaggio di programmazione I numeri interi possono essere rappresentati come

Dettagli

6) Tradurre la definizione ottenuta nel punto 1 in Lisp e calcolare degli esempi sul computer.

6) Tradurre la definizione ottenuta nel punto 1 in Lisp e calcolare degli esempi sul computer. Esercizi Lisp - 15 aprile 2013 1) Data la funzione RAZ in Lisp: (de raz (x y) (if (< x y) x (raz (- x y) y))) Quale funzione è calcolata da RAZ? 2) Data una funzione H in Lisp: (de h (n) (if (= 0 n) 0

Dettagli

Brevissima introduzione al Lisp

Brevissima introduzione al Lisp Brevissima introduzione al Lisp Giorgio Ausiello, Luigi Laura 2 marzo 2004 Queste pagine costituiscono un riferimento per gli studenti del corso di Informatica Teorica e non hanno nessuna pretesa di completezza

Dettagli

Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici. Ricorsione

Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici. Ricorsione Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Ricorsione 1 Tecniche per risolvere problemi: riduzione a sottoproblemi più semplici Problema: dati tre numeri interi, calcolarne

Dettagli

Programmazione web lato client con JavaScript. Marco Camurri 1

Programmazione web lato client con JavaScript. Marco Camurri 1 Programmazione web lato client con JavaScript Marco Camurri 1 JavaScript E' un LINGUAGGIO DI PROGRAMMAZIONE che consente di inserire codice in una pagina web Sintassi simile a Java (e al C), ma NON E'

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza

Dettagli

Esercizi Programmazione I

Esercizi Programmazione I Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]

Dettagli

MICROSOFT EXCEL FORMULE E FUNZIONI

MICROSOFT EXCEL FORMULE E FUNZIONI MICROSOFT EXCEL FORMULE E FUNZIONI Lezione 1.2 a.a. 2016-2017 Ing. Giulia Fiscon Sommario Introduzione Microsoft Excel Lavorare con i fogli di calcolo Riferimenti di cella Formule e Funzioni Funzioni logiche

Dettagli

Linguaggi di Programmazione LISP

Linguaggi di Programmazione LISP Linguaggi di Programmazione LISP Carlo Lepori Scuola di Ingegneria del Canton Ticino (STS) Introduzione In questa parte del corso Linguaggi di programmazione affronteremo alcune tematiche riguardanti la

Dettagli

Programmazione Funzionale

Programmazione Funzionale 1/9 Programmazione Funzionale Esercizio sulle variabili locali Davide Mottin - Themis Palpanas March 12, 2014 OCaml Funzioni preparatorie Sommario 2/9 Funzioni preparatorie Costruire una funzione val even

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

Programmazione Ricorsione

Programmazione Ricorsione Programmazione Ricorsione Samuel Rota Bulò DAIS Università Ca Foscari di Venezia. Outline Ricorsione Cos è la ricorsione? In matematica... n! = { n (n 1)! se n > 0 1 altrimenti N = {0} {i + 1 : i N} Principio

Dettagli

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente: Pag 29 4) La ricorsione 4.1 Funzioni matematiche ricorsive Partiamo da un concetto ben noto, quello delle funzioni matematiche ricorsive. Una funzione matematica è detta ricorsiva quando la sua definizione

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Espressioni e Comandi

Espressioni e Comandi Espressioni e Comandi March 24, 2017 Elementi di Base dei Programmi Ricordate? Macchina Astratta: Insieme di algoritmi e strutture dati che permettono di memorizzare ed eseguire programmi Abbiamo parlato

Dettagli

Programmazione Funzionale

Programmazione Funzionale 1/11 Programmazione Funzionale Esercizi in preparazione dell esame Davide Mottin - Themis Palpanas May 28, 2014 Svolgimento d esame Inferire il tipo di un espressione Esercizi sul lambda-calcolo Esercizi

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Dettagli

La principale modalità di calcolo è l applicazione di funzioni

La principale modalità di calcolo è l applicazione di funzioni 1 La principale modalità di calcolo è l applicazione di funzioni Nei linguaggi funzionali puri non esistono strutture di controllo predefinite per la realizzazione di cicli quali for, while, repeat Un

Dettagli

Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. http://www.sics.se/sicstus/ Bob Kowalski: "Algoritmo = Logica + Controllo"

Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. http://www.sics.se/sicstus/ Bob Kowalski: Algoritmo = Logica + Controllo Programmazione Logica Bob Kowalski: "Algoritmo = Logica + Controllo" nella programmazione tradizionale: il programmatore deve occuparsi di entrambi gli aspetti nella programmazione dichiarativa: il programmatore

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole e Circuiti Logici Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2016/17 Algebra di Boole e Circuiti Logici L Algebra

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Le classi di istruzioni in C++ 1 Le classi di istruzioni in C++ SEQUENZIALI Statement semplice Statement composto CONDIZIONALI if < expr.> else switch case

Dettagli

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande/ VERSIONE 1 1) L approccio con cui si studia un sistema focalizzandosi solo sul rapporto tra input e output si chiama

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi

Dettagli

Programmazione. Valerio Perticone, Sergio Perticone

Programmazione. Valerio Perticone, Sergio Perticone Programmazione Valerio Perticone, Sergio Perticone Programmazione La programmazione è un processo che parte dall'analisi di un problema computazionale ed arriva, mediante un'opportuna codifica formale,

Dettagli

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa. 3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il

Dettagli

Note per la Lezione 4 Ugo Vaccaro

Note per la Lezione 4 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che

Dettagli

LISP e Calcolabilità

LISP e Calcolabilità LISP e Calcolabilità Eugen Neidl Il LISP è un linguaggio di programmazione, la calcolabilità è la teoria delle funzioni che sono calcolabili mediante procedimenti meccanici. L'uno e l'altra godono fama

Dettagli

let quorem pair = ((fst pair)/(snd pair), (fst pair) mod (snd pair))

let quorem pair = ((fst pair)/(snd pair), (fst pair) mod (snd pair)) 1 PATTERN Consideriamo la definizione della funzione quorem: (* quorem: int * int -> int * int *) (* quorem(n,m) = quoziente e resto della divisione di n per m *) let quorem (n,m) = (n/m, n mod m) Per

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Definizione di metodi in Java

Definizione di metodi in Java Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un

Dettagli

Capitolo 5 - Funzioni

Capitolo 5 - Funzioni Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente

Dettagli

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2 Le espressioni in C++ (CAP 4) Indice Le espressioni in C++ : precedenze e associatività degli operatori Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 2014/2015 gli operatori

Dettagli

Costrutti per il controllo del flusso di esecuzione

Costrutti per il controllo del flusso di esecuzione Costrutti per il controllo del flusso di esecuzione Fondamenti di informatica L-B Laboratorio Alessandro Falchi afalchi@deis.unibo.it Operatori (1) PRECEDENZA ASSOCIATIVITÀ OPERATORE TIPO/I DEGLI OPERANDI

Dettagli

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO Linguaggi di programmazione classificati in base alle loro caratteristiche fondamentali. Linguaggio macchina, binario e fortemente legato all architettura. Linguaggi

Dettagli

Matlab. Istruzioni condizionali, cicli for e cicli while.

Matlab. Istruzioni condizionali, cicli for e cicli while. Matlab. Istruzioni condizionali, cicli for e cicli while. Alvise Sommariva Università degli Studi di Padova Dipartimento di Matematica 17 marzo 2016 Alvise Sommariva Introduzione 1/ 18 Introduzione Il

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 6 Istruzioni Condizionali Carla Limongelli Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Istruzioni condizionali

Dettagli

Programmazione in Python. Moreno Marzolla

Programmazione in Python. Moreno Marzolla Programmazione in Python Moreno Marzolla http://www.moreno.marzolla.name/ Copyright 2011, Moreno Marzolla (http://www.moreno.marzolla.name/teaching/labinf2011/) This work is licensed under the Creative

Dettagli

Corso di Fondamenti di Informatica. La ricorsione

Corso di Fondamenti di Informatica. La ricorsione Corso di Fondamenti di Informatica La ricorsione La ricorsione Si dice che un oggetto (una struttura dati, una funzione matematica, un concetto ) è ricorsivo se è possibile darne una definizione in termini

Dettagli

Java vs Ocaml. Una prima analisi

Java vs Ocaml. Una prima analisi Java vs Ocaml Una prima analisi Alcune cara6eris7che di Java richiedono una conoscenza de6agliata delle librerie Sistemi di supporto forniscono mol7 strumen7 per programmare con Java (Ecplise è un esempio

Dettagli

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 JavaScript Core Language Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 Condizioni L utilizzo di operatori relazionali e logici consente di formulare delle condizioni

Dettagli

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Algebra di Boole Stefano Cagnoni Algebra di Boole L algebra

Dettagli

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi: FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi

Dettagli

Problemi, algoritmi, calcolatore

Problemi, algoritmi, calcolatore Problemi, algoritmi, calcolatore Informatica e Programmazione Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin Problemi, algoritmi, calcolatori Introduzione

Dettagli

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare

Dettagli

Strutture di controllo in C++

Strutture di controllo in C++ Strutture di controllo in C++ Fondamenti di Informatica R. Basili a.a. 2006-2007 Il controllo: selezione Spesso la sequenza delle istruzioni non e prevedibile a priori ma dipende strettamente dalle configurazioni

Dettagli

5 - Istruzioni condizionali

5 - Istruzioni condizionali 5 - Istruzioni condizionali Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

TRADUZIONE STATE AND TRANSITION DIAGRAM UML E CORRETTEZZA DEI PROGRAMMI IN TLA+

TRADUZIONE STATE AND TRANSITION DIAGRAM UML E CORRETTEZZA DEI PROGRAMMI IN TLA+ TRADUZIONE DI STATE AND TRANSITION DIAGRAM UML E CORRETTEZZA DEI PROGRAMMI IN TLA+ a cura di: Eleonora Antonelli Simone Maletta Stefano Novara INDICE 1. Grammatica di TLA+ a cura di Eleonora Antonelli

Dettagli

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input

Dettagli

MATLAB Elementi di grafica Costrutti di programmazione

MATLAB Elementi di grafica Costrutti di programmazione MATLAB Elementi di grafica Costrutti di programmazione Operazioni punto Le operazioni punto agiscono su array che abbiano le stesse dimensioni:.* prodotto elemento per elemento./ divisione elemento per

Dettagli

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Introduzione Istruzioni

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

Dettagli

Cosa si intende con stato

Cosa si intende con stato Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando

Dettagli

Classificazione dei termini

Classificazione dei termini Classificazione dei termini Il Prolog è un linguaggio a tipizzazione dinamica Predicati predefiniti per riconoscere il tipo di un termine?- var(x). var, nonvar?- var(padre(x)). false.?- X=Y, Y=23, var(x).

Dettagli

Una libreria di funzioni per la geometria analitica

Una libreria di funzioni per la geometria analitica Una libreria di funzioni per la geometria analitica Michele Impedovo La geometria analitica del piano costituisce uno dei più importanti e consolidati argomenti di matematica. Un lavoro interessante parallelo

Dettagli

Il concetto di calcolatore e di algoritmo

Il concetto di calcolatore e di algoritmo Il concetto di calcolatore e di algoritmo Elementi di Informatica e Programmazione Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Informatica

Dettagli

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di

Dettagli

Introduzione alla programmazione in C(++)

Introduzione alla programmazione in C(++) Testi Testi Consigliati: Introduzione alla programmazione in C(++) A. Kelley & I. Pohl C didattica e programmazione A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. D. M. M. Ritchie

Dettagli

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe

Dettagli

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a Dott.ssa Maria Carmela De Bonis a.a. 2013-14 Programmi Un elaboratore riceve dei dati in ingresso, li elabora secondo una sequenza predefinita di operazioni e infine restituisce il risultato sotto forma

Dettagli

Laurea in Ingegneria Informatica Facoltà di Ingegneria Università di Roma La Sapienza. Dispense del Corso di Intelligenza Artificiale

Laurea in Ingegneria Informatica Facoltà di Ingegneria Università di Roma La Sapienza. Dispense del Corso di Intelligenza Artificiale Laurea in Ingegneria Informatica Facoltà di Ingegneria Università di Roma La Sapienza Dispense del Corso di Intelligenza Artificiale Anno Accademico 2003/04 Linguaggi per l Intelligenza Artificiale Daniele

Dettagli

Valutazione Lazy. Prefazione alla lezione

Valutazione Lazy. Prefazione alla lezione Valutazione Lazy Aniello Murano Università degli Studi di Napoli Federico II 1 Prefazione alla lezione Nella lezione precedente abbiamo introdotto i linguaggi (funzionali) con tipi di ordine superiore.

Dettagli

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06 1 ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA # Objective Caml version 3.06 Il cancelletto è il prompt di Caml. # 3*8;; - : int = 24 LETTURA: viene

Dettagli

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell

Dettagli

Tempo e spazio di calcolo

Tempo e spazio di calcolo Tempo e spazio di calcolo Modelli di calcolo e metodologie di analisi F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) In quale modo stimiamo il tempo di calcolo? Possiamo considerare

Dettagli

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C... Sommario PREFAZIONE...XI Aggiornamenti e novità... xi Lo scopo di questo libro... xii Diagramma delle dipendenze... xii La metodologia di insegnamento... xiii Panoramica sul libro... xvi Ringraziamenti...

Dettagli

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi

Dettagli

Capitolo 19. Ricorsione

Capitolo 19. Ricorsione Capitolo 19 La ricorsione Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a sé stessa Esempio: Funzione fattoriale su interi non negativi: f(n) = n!

Dettagli

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Fondamenti di Informatica Linguaggi di Programmazione Michele Tomaiuolo Linguaggi macchina I

Dettagli

Introduzione alla programmazione Esercizi risolti

Introduzione alla programmazione Esercizi risolti Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma

Dettagli

Tipici tempi di esecuzione. Martedì 7 ottobre 2014

Tipici tempi di esecuzione. Martedì 7 ottobre 2014 Tipici tempi di esecuzione Martedì 7 ottobre 2014 Punto della situazione Abbiamo definito il tempo di esecuzione di un algoritmo Scelto l analisi asintotica Abbiamo definito le notazioni asintotiche che

Dettagli

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento lunedì, prima o dopo lezione 1 Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

Tipi di dato primitivi

Tipi di dato primitivi Tipi di dato primitivi (oltre int) Tipi di dato primitivi int (già trattati) Valori logici (ricordati) Valori reali Valori carattere Informatica - A.A. 2009/2010 - Tipi di dato 2 1 Valori logici (il caso

Dettagli

Informatica e Bioinformatica: Algoritmi

Informatica e Bioinformatica: Algoritmi Informatica e Bioinformatica: Algoritmi 20 Marzo 2014 Programmi Applicativi Programmi Applicativi Sistema Operativo (lezione 3) Macchina Hardware (lezione 1 e 2) La macchina hardware permette l esecuzione

Dettagli

Tipi di segnali (logici) predefiniti. Rappresentazione dei segnali in VHDL. Tipo bit (definito nel package standard)

Tipi di segnali (logici) predefiniti. Rappresentazione dei segnali in VHDL. Tipo bit (definito nel package standard) Tipi di segnali (logici) predefiniti Tipo bit (definito nel package standard) Rappresentazione dei segnali in VHDL Approfondimento del corso di Linguaggi di descrizione dell hardware type Bit is ('0',

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 3 Alberto Ceselli alberto.ceselli@unimi.it Università degli Studi di Milano 5 Marzo 2013 Storicamemente Introduzione al paradigma funzionale 1977: ACM Turing

Dettagli

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab Metodi di Analisi dei Dati Sperimentali AA /2010 Pier Luca Maffettone Elementi di Matlab Sommario Introduzione Variabili Manipolazione di elementi Creazione di vettori/matrici Operazioni elementari Funzioni

Dettagli

2. Sintassi e Semantica

2. Sintassi e Semantica 2. Sintassi e Semantica Un linguaggio di programmazione è un linguaggio formale dotato di una sintassi e una semantica ben definita. Per linguaggio formale si intende un insieme di stringhe di lunghezza

Dettagli

Laboratorio Informatica

Laboratorio Informatica Laboratorio Informatica Le funzioni Massimo Marchi http://marchi.usr.dsi.unimi.it/ Le funzioni Introduzione Massimo Marchi - http:// marchi.usr.dsi.unimi.it/ Le funzioni nelle formule! L utente per creare

Dettagli

Definizioni ricorsive

Definizioni ricorsive Definizioni ricorsive Caso base : (* fact: int -> int *) let rec fact n = if n=0 then 1 else n * fact (n-1) n! = 1 2... n 1 n = (n 1)! n = n (n 1)! 0! = 1 Il fattoriale è definito in termini di se stesso,

Dettagli

DEFINIZIONE DI NUOVI TIPI Un tipo è un insieme di valori.

DEFINIZIONE DI NUOVI TIPI Un tipo è un insieme di valori. 1 DEFINIZIONE DI NUOVI TIPI Un tipo è un insieme di valori. Per definire un nuovo tipo occorre specificare: 1. un nome per il tipo 2. come costruire i valori del tipo, cioè quali sono i costruttori del

Dettagli

401 PREDICATI RICORSIVI PRIMITIVI

401 PREDICATI RICORSIVI PRIMITIVI 401 PREDICATI RICORSIVI PRIMITIVI Corso di Informatica Teorica - modulo 2 Prof. Settimo Termini 1 Breve richiamo Un predicato su un insieme S è una funzione totale P su S tale che a S si ha: P(a) = VERO

Dettagli

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione INFORMATICA B Ingegneria Elettrica La ricorsione Ricorsione Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Prolog: aritmetica e ricorsione

Prolog: aritmetica e ricorsione Capitolo 13 Prolog: aritmetica e ricorsione Slide: Aritmetica e ricorsione 13.1 Operatori aritmetici In logica non vi è alcun meccanismo per la valutazione di funzioni, che è fondamentale in un linguaggio

Dettagli

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript Funzioni Funzioni predefinite della libreria matematica Funzioni disponibili: Math.sqrt(x) radice quadrata Math.log(x) logaritmo naturale in base e di x Math.abs(x) valore assoluto di x Math.ceil(x) arrotonda

Dettagli

Architettura degli Elaboratori

Architettura degli Elaboratori circuiti combinatori: ALU slide a cura di Salvatore Orlando, Marta Simeoni, Andrea Torsello 1 ALU ALU (Arithmetic Logic Unit) circuito combinatorio all interno del processore per l esecuzione di istruzioni

Dettagli

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche Fondamenti di Informatica T-1 modulo 2 Laboratorio 04: stringhe 1 Stringhe In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche terminatore

Dettagli

Diagrammi di flusso. Un metodo per rappresentare graficamente gli algoritmi. sotto programma. Input/ Output. Start. predicato Elaborazione Stop

Diagrammi di flusso. Un metodo per rappresentare graficamente gli algoritmi. sotto programma. Input/ Output. Start. predicato Elaborazione Stop Diagrammi di flusso Un metodo per rappresentare graficamente gli algoritmi. Input/ Output sotto programma Start predicato Elaborazione Stop La programmazione strutturata Un algoritmo è strutturato in blocchi

Dettagli

Individuazione di sottoproblemi

Individuazione di sottoproblemi Individuazione di sottoproblemi Quando il problema è complesso conviene partire con una individuazione di sottoproblemi Scriviamo un algoritmo contenente azioni o condizioni complesse per l esecutore che

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione Laurea in Bioinformatica Docente: Carlo Drioli Web: www.scienze.univr.it/fol/main?ent=oi&id=39990 Programmazione: Dati Strutture di controllo Algoritmi Materiale tratto dai

Dettagli