Post on 08-Jun-2020
ProgrammazioneIntroduzione
Samuel Rota Bulo
Dipartimento di Informatica.Universita Ca’ Foscari di Venezia.
2010
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 Informatica. Universita Ca’ Foscari di Venezia.
Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali
Il corso
Docente : Samuel Rota Bulo (srotabul@dsi.unive.it)
Orario : sabato 8:45 - 10:30
Aula : 1
Ricevimento : da concordare via email
Homepage : www.dsi.unive.it/∼srotabul/programming.html
Programmazione Introduzione Dipartimento di Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. 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 = 0.42857142857142854
# 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 Informatica. 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 Informatica. 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 Informatica. 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 Informatica. Universita Ca’ Foscari di Venezia.