Programmazione Introduzione - Università Ca' Foscari...
Transcript of Programmazione Introduzione - Università Ca' Foscari...
ProgrammazioneIntroduzione
Samuel Rota Bulo
Dipartimento di Scienza Ambientali, Informatica e Statistica.Universita Ca’ Foscari di Venezia.
2011
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Outline
Informazioni generali
Introduzione alla programmazione
Il linguaggio OCaML
Numeri interi e reali
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Il corso
Docente : Samuel Rota Bulo ([email protected])
Orario : mercoledı 18:15 - 19:45 e sabato 10:30 - 12:00
Aula : A / 1
Ricevimento : da concordare via email
Homepage : www.dsi.unive.it/∼srotabul/programming.html
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Testi di riferimento
I M. Hailperin, B. Kaiser, K. Knight.Concrete Abstractions.(http://gustavus.edu/+max/concrete-abstractions-pdfs/index.html)
I J. Hickey.Introduction to Objective Caml.(http://files.metaprl.org/doc/ocaml-book.pdf)
I Emmanuel Chailloux, Pascal Manoury and Bruno Pagano.Developing Applications With Objective CaML.(http://caml.inria.fr/pub/docs/oreilly-book/ocaml-ora-book.pdf)
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Outline
Informazioni generali
Introduzione alla programmazione
Il linguaggio OCaML
Numeri interi e reali
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
You think you know when you can learn, are moresure when you can write, even more when you can teach,but certain when you can program.
– Alan J. Perlis, “Epigrams in Programming”
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
A good programmer is someone who looks both waysbefore crossing a one-way street.
– Doug Linder, systems administrator
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
When someone says - I want a programming languagein which I need only say what I wish done -, give him alollipop.
– Alan J. Perlis, “Epigrams in Programming”
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
The only way to learn a new programming language isby writing programs in it.
– B. Kernighan & D. Ritchie
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Cosa significa programmare?
I Programmare significa estendere le capacita di una“macchina” con nuove funzionalita finalizzate a risolverenuovi problemi.
I Il compito del programmatore e “insegnare” alla macchina ilprocedimento attraverso il quale un determinato problema puoessere risolto .
I Il linguaggio con cui il programmatore comunica questoprocedimento alla “macchina” e detto linguaggio diprogrammazione.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Problem-solving
I Un bravo programmatore deve essere in grado di:
1. analizzare un problema (generalmente espresso in linguaggionaturale);
2. esprimerlo in modo astratto e formale (magari, aiutandosi conesempi);
3. formalizzare un procedimento risolutivo in un linguaggiopreciso (algoritmo);
4. verificare che il procedimento sia corretto ed eventualmenterivisitarlo;
5. fare attenzione ai dettagli con atteggiamento auto-critico.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Insegnante ≈ Programmatore
I Insegnante ≈ Programmatore
I Studente ≈ Macchina
I Linguaggio di programmazione ≈ Linguaggio naturale
I L’insegnante insegna allo studente degli “algoritmi” espressi inlinguaggio naturale affinche quest’ultimo possa risolvaproblemi.
Un programmatore in genere ha a che fare con macchine molto piu“stupide” !
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Macchina alla von Neumann
I Le macchine con cui abbiamo (comunemente) a che farepresentano un architettura alla von Neumann.
ArithmeticLogicUnit
ControlUnit
Memory
Input Output
Accumulator
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Programmazione imperativa
I Paradigma di programmazione in cui la computazione edescritta mediante comandi che modificano lo stato delprogramma.
I Lo stato viene tipicamente modificato con comandi diassegnamento del tipo v = E o v := E .
I I comandi sono scritti sequenzialmente, separati tra di loro.
I E possibile esprimere condizioni, ripetizioni o organizzare ilcodice in procedure o funzioni.
I E il paradigma piu diffuso: C, C++, Java, Pascal e derivati,Basic e derivati, . . .
I Caratteristiche strettamente legate all’architettura di vonNeumann.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Paradigma funzionale
I Radicalmente diverso dal paradigma imperativo.I Il paradigma e slegato dalla macchina di von NeumannI Paradigma di programmazione in cui la computazione e
descritta mediante valutazioni di funzioni.I Il programma e un’espressione e l’esecuzione del programma e
la valutazione di questa espressione.I In senso puro, un linguaggio funzionale non ha variabili e non
ha stato.I Non ci sono assegnamenti. Non c’e sequenzialita dei comandi.I Le funzioni sono alla base di tutto. Possono essere
interpretate come valori, e possono essere argomento o valoredi ritorno di altre funzioni.
I Al posto di istruzioni di ciclo vi e la ricorsione di funzioni.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Programma in astratto
Siano σ0 e σn stato iniziale e finale di un programmaI Programma in un linguaggio imperativo
I Descrive una sequenza di comandi ci , i = 0, · · · , n − 1 tale percui
σ0c0−→ σ1
c1−→ σ2c2−→ · · · cn−1−−→ σn .
I Programma in un linguaggio funzionaleI Descrive una funzione f che dato l’argomento σ0 ritorna σn
σn = f (σ0) .
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Un esempio concreto: calcolo del fattoriale
Fattoriale di n
n! = n · (n − 1) · · · 1 , 0! = 1
Imperativo
funzione FATTORIALE (n)
x <- 1
mentre n>0
x <- n*x
n <- n-1
ritorna x
Funzionale
funzione FATTORIALE (n)
ritorna se n=0
1
altrimenti
n * FATTORIALE(n-1)
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Outline
Informazioni generali
Introduzione alla programmazione
Il linguaggio OCaML
Numeri interi e reali
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Il linguaggio OCaML
I Linguaggio funzionale (non puro)
I Dialetto di ML (Meta-Language)
I Progetto Open Source dell’INRIA(Istituto nazionale francese di ricerca in informatica)
I interprete/compilatore reperibile all’indirizzohttp://caml.inria.fr/
I disponibile per Windows, Linux, Unix e MacOSX.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Alcune caratteristiche di ML
I Linguaggio funzionale: funzioni sono gli oggetti principalidel linguaggio.
I Fortemente tipato: il tipo di ogni variabile ed espressione edeterminato al momento della compilazione.
I Inferenza di tipo: i tipi delle espressioni vengono inferite.Raramente il programmatore assegna tipo direttamente.
I Polimorfismo: si possono scrivere funzioni che sonoindipendenti dai tipi degli argomenti.
I Semantica formale: hanno interpretazione matematica.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Perche OCaML?
I Didatticamente altri linguaggi funzionali sarebbero preferibiliad OCaML, come per es. Scheme.
I Infatti, OCaML non e un linguaggio funzionale puro, ma eprevalentemente funzionale.
I Utilizzato nel mondo del lavoro, ed e molto compatibile conF# (linguaggio della famiglia .NET di Microsoft).
I Open source
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
L’interprete OCaML
I Avviamo l’interprete invocando ocaml
Objective Caml version 3.10.2
#
I L’interprete rimane in attesa di espressioni da valutare.
I Le espressioni devono terminare con ;; per essere valutate.
I Per uscire digitare
# exit 0;;
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Outline
Informazioni generali
Introduzione alla programmazione
Il linguaggio OCaML
Numeri interi e reali
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
I numeri interi
I Il programma piu semplice consiste in un numero:
# 1;;
- : int = 1
I L’interprete valuta l’espressione ritornandone il valore 1 e iltipo int.
I Il tipo int rappresenta un sottoinsieme dei numeri interi Z.
# 100000000000000000000;;
Integer literal exceeds the range of representable
integers of type int
I Il tipo int in OCaML ha una rappresentazione a 32/64 bit aseconda dell’architettura.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Alcune espressioni sugli interi
# - -2;; (* Negazione *)
- : int = 2
# 2 + 3;; (* Addizione *)
- : int = 5
# 2 - 3;; (* Sottrazione *)
- : int = -1
# 2 * 3;; (* Moltiplicazione *)
- : int = 6
# 7 / 3;; (* Divisione intera *)
- : int = 2
# 7 mod 3;; (* Modulo *)
- : int = 1
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Eccezioni
I Alcune espressioni possono generare degli errori “controllabili”chiamate eccezioni.
I Verranno approfondite piu avanti.
# 1 / 0;; (* Eccezione ! *)
Exception: Division by zero.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Forme alternative per i numeri interi
I Accanto alla forma decimale, possiamo esprimere un intero informa ottale . . .
# 0o17;; (* Forma ottale *)
- : int = 15
I . . . esadecimale . . .
# 0x1F;; (* Forma esadecimale *)
- : int = 31
I . . . e binaria.
# 0b11110;; (* Forma binaria *)
- : int = 30
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
I numeri reali
I Il tipo float rappresenta un sottoinsieme dei numeri reali Restesi con i simboli ±∞ e Nan (Not a number).
# 1.2;;
- : float = 1.2
# -1.2e-10;; (* notazione scientifica *)
- : float = -1.2e-10
# -1.2E-10;;
- : float = -1.2E-10
# 1E400;; (* approssimato a +infinito *)
- : float = infinity
# -1E400;; (* approssimato a -infinito *)
- : float = neg_infinity
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Tipizzazione forte di ML
I Ogni espressione deve avere un tipo.
I Se non e possibile determinare il tipo di un’espressione questagenera un errore.
# 1.1 + 2;; (* Errore di tipo ! *)
^^^
This expression has type float but is here used
with type int
# 1.1 * 0;; (* Errore di tipo ! *)
^^^
This expression has type float but is here used
with type int
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Alcune espressioni sui reali
# 2.0 +. 3.0;; (* Addizione *)
- : float = 5.
# 2. -. 3.;; (* Sottrazione *)
- : float = -1.
# 2. *. 3.;; (* Moltiplicazione *)
- : float = 6.
# 7. /. 3.;; (* Divisione *)
- : float = 2.3333333333333333
# 2. ** 3.;; (* Potenza *)
- : float = 8.
# int of float 1.2;; (* Conversione float -> int *)
- : int = 1
# float of int 1;; (* Conversioni int -> float *)
- : float = 1.
# -.(-2. +. 3.);; (* Negazione *)
- : float = -1.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Aritmetica floating-point
I L’aritmetica dei floating-point e estesa tenendo conto deisimboli di infinito e Nan.
I Alcuni esempi sono:
# -1. /. 0.;; (* -Infinito *)
- : float = neg infinity
# 0. /. 0.;; (* Indefinito *)
- : float = nan
# 1. /. infinity;; (* Zero *)
- : float = 0.
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Attenzione agli errori di tipo !
# 1.1 +. 2;; (* Errore di tipo ! *)
^
This expression has type int but is here used
with type float
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Una calcolatrice poco tascabile !
I Per ora abbiamo solo visto che possiamo fare semplicioperazioni !
I Se scriviamo espressioni piu complicate le operazionirispettano l’ordine di precedenza standard.
I Possiamo forzare la precedenza mediante parentesi.
# 1 + 2 * 3;;
- : int = 7
# (1 + 2) * 3;;
- : int = 9
# 1 + int_of_float (2.*.3.**2.**2.);;
- : int = 163
Programmazione Introduzione Dipartimento di Scienza Ambientali, Informatica e Statistica. Universita Ca’ Foscari di Venezia.