Category Archives: OCaml

OCaml – intro cont.

Continuo l’esame di OCaml, iniziato qui. Mi ero perso su una cosa che dovrebbe essere banale ma un po’ quirkosa, imho. Poi, magari, scoprirò che è logico e naturale e giusto che sia così; per intanto eccola:


l’uso delle parentesi per il cast a 3 a volte sono necessarie, a volte no. Finchè si prova con l’interprete non ci sono problemi ma nelle condizioni reali ciò potrebbe essere fastidioso.


sembrerebbe che le parentesi per il cast ci vogliano sempre.

Mentre ci sono i tipi base sono i seguenti

 OCaml type     Range

int            31-bit signed int (roughly +/- 1 billion) on 32-bit processors,
               or 63-bit signed int on 64-bit processors
float          IEEE double-precision floating point, equivalent to C's double
bool           A boolean, written either true or false
char           An 8-bit character
string         A string
unit           Written as ()

dove unit equivale al void del C.

Tutta questa cura sul controllo dei tipi non impedisce di avere funzioni polimorfe: la differenza sta in un apice 8)

ma ecco

cosmico! direbbe il prof. Fontecedro, fa tutto lui. E ce lo dice quando definiamo la funzione, così:

val dammi5 : 'a -> int = <fun>

indicando ‘a. Nel caso di definizione di media si aveva

val media : float -> float -> float = <fun>

niente apici e tipi ben definiti 8)

A questo punto il tutorial diventa molto simile alla Guida Galattica, riporto copincollando perché troppo bello:

Dunque l’argomento di questo tutorial è che i linguaggi funzionali hanno molte Caratteristiche Veramente Fiche, e che OCaml è un linguaggio che ha tutte queste Cratteristiche Veramente Fiche infilate dentro insieme, il che lo rende dunque un linguaggio molto pratico da usare per veri programmatori. Ma la cosa strana è che la maggior parte di queste caratteristiche fiche non hanno proprio nulla a che fare con la “programmazione funzionale”. Difatti, sono giunto alla prima Caratteristica Veramente Fica, e non ho ancora parlato del perché la programmazione funzionale è chiamata “funzionale”. Ad ogni modo, ecco la prima Caratteristica Veramente Fica: l’inferenza dei tipi.

OK, OCaml gestisce lui i tipi, tranne casi particolari che solo alcuni ne hanno bisogno (diffidatene, come dei programmatori muniti di cacciavite).
Ecco io sono arrivato alla fine della pagina The Basics. (Esiste anche in italiano, l’abitudine…). E mi sto ponendo una domanda: conviene che continui a raccontare queste cose che sono un riassunto di cose presenti sul Web, fatte molto bene (stessa qualità della Guida Galattica, l’ho già detto)? Diciamo che per ora mi fermo qui, ci penso su e prossimamente… 8)

Poi ho dei dubbi su post molto corti come l’attuale. In questo periodo sono piuttosto preso da mille cose, forse ci saranno meno post miei. Anche perché odio quelli con solo fuffa per far vedere che ci sono :-(

OCaml – intro

OCaml è il modo sintetico per dire Objective Caml, esattamente come si dice politene per polietilene o cencinquanta per centocinquanta (questo sono a Milano e dintorni). Poi Caml a sua volta sta per Categorical Abstract Machine Language, anche se l’abstract machine è stata abbandonata. Ed è una creatura francese, dell’INRIA. Si trova tutto su Wikipedia, al solito. Quella che non piace alla Banda del Nano Parruccato.

Il primo che mi ha fatto scoprire OCaml è stato MarkCC, con questo post, poi ci ha anche LOLlato su e è tornato recentemente sull’argomento. Nel frattempo ho scoperto che viene usato da un mio ex capo; sì di solito gli ex capi stanno un po’, come dire, ma questo no. E poi forse legge il blog: è un ottimo ex capo, ripensandoci.

Non è che adesso mi fionderò su OCaml e basta; anzi sarà, forse, preso un pizzico alla volta, in dosi quasi omeopatiche, lo sto ancora scoprendo. Mi affascina la programmazione funzionale, qui unificata con l’imperativa e la OOP. Sperando che non sia roba astrusamente astrusa, ma non dovrebbe 8)

Per Ubuntu OCaml c’è nel Software Center, batterie incluse, ma per adesso mi sono limitato a installare l’interprete con

sudo apt-get install ocaml-interp

per ora dovrebbe bastare.

Conviene partire dall’Objective CAML Tutorial. Uh! c’è la versione italiana!

Allora un tour (consiglio: pronunciare “un tour” en français) semplice semplice per ambientarsi.

Tutto quello che segue è preso dal tutorial it » Tutorial su Objective CAML al quale si rimanda per gli approfondimenti.

Provo a definire la funzione media, che restituisce (indovinate) la media tra due float:

OK! in 3 righe ci sono: come mettere i commenti; gli operatori reali che sono come quelli interi ma seguiti da un punto; il ;;, end della funzione; e la risposta di OCaml che indica tutti i tipi implicati.

Il passo logico successivo è quello di usare la funzione, chiamarla con i valori 3.0 e 4.0

OK! non si usano le parentesi; cioè si usano ma per un’altra cosa. E se si passa un tipo sbagliato OCaml non perdona, ma ci dice cosa non va.

Introduciamo una variabile (ahemm: non è una vera variabile come si usa nei linguaggi comuni, ne riparleremo)

OK! funziona. E qui c’è un’altra particolarità del linguaggio: float è qui usata come alias di float_of_int, sì si può.

OK! credo che come primo contatto, assaggino possa bastare. Ocaml si può usare ma ha le sue particolarità. Tante come si è visto. All’inizio è facile dimenticare il punto dopo l’operatore per i float, mettere delle parentesi dove non ci vanno, dimenticare il ;;, …
Personalmente quando faccio uno script in Lisp e poi torno alle cose ordinarie dimentico virgole e sbaglio le parentesi. Chissà cosa capiterà adesso 8)

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 77 follower