Scheme – Lezione 1 – Introduzione

LambdaScheme è uno dei principali dialetti del Lisp. E’ un linguaggio multi paradigma anche se incentrato sul paradigma funzionale per questioni ereditarie. Nonostante ciò con Scheme si può fare praticamente tutto, dalla programmazione a oggetti alla programmazione imperativa, dalla funzionale ricorsiva alla sua versione “logica”.

Ci tengo però a precisare che Scheme è e rimane un linguaggio un po particolare. Diverso concettualmente da tutti i linguaggi tradizionali. Scheme è indirizzato a:

  • Persone che sanno programmare e che vogliono espandere i loro confini in modi che non avrebbero mai immaginato.
  • Persone che non hanno mai programmato e che volgiono conoscere lo spirito intimo della programmazione.
  • Persone a cui la programmazione classica non è mai piaciuta ma amano lo spirito “matematico” della stessa.
  • Persone che amano la neuroingegneria in senso lato.

A chi NON è indirizzato:

  • Persone che sanno programmare e che non sentono il bisogno di imparare altro.
  • Persone che non hanno mai programmato e vogliono subito essere produttivi e fare qualche applicazione carina.
  • Persone la cui idea di programmazione è costruire enormi gestionali in grado di mantenere informazioni su pescherie sul mar baltico, parrucchieri per donnole, palestre e altre cose noiose (per me ovviamente).

Chiariti questi punti spero di avere da ora in poi solo persone che rientrano nei primi tre punti e che non si spazientiscano se Scheme sembri strano, complicato, astratto e chi più ne ha più ne metta.

Iniziamo con il presentare alcuni aspetti essenziali. Lo studio di Scheme è IMPRESCINDIBILE da questi concetti.

NOTAZIONE PREFISSA

Scheme come in Lisp esprime tutto in notazione prefissa. In notazione prefissa bisogna prima specificare la funzione e poi tutti i suoi parametri a seguire.

Ad esempio 1+1 diventa:

(+ 1 1)

Mentre 2 + (3 * 2) + 1 diventa:

(+ 2 (* 3 2) 1)

Questo tipo di notazione può risultare a prima vista molto complessa e inutilmente dispendiosa. E’ vero e non è vero. Nelle semplici operazioni matematiche può effettivamente risultare poco intuitiva e poco chiara, tuttavia, in tutti gli altri casi questa forma permette un controllo del codice inqguagliabile. E’ molto facile, ad esempio, istruire un programma a creare ed eseguire codice proprio.

LISTE E ATOMI

Un altra cosa da tenere in considerazione è che in Scheme tutto è una lista. Anche lo stesso programma è una lista.

Una lista può contenere una lista o un atomo. Un atomo è semplicemente tutto ciò che non è una lista (ad esempio stringhe, numeri, caratteri e nomi di funzioni).

Per generare esplicitamente una lista si può usare il comando list.


1
2
3
4
5
6
7
8
; Lista di numeri.
(list 1 2 3)

; Lista di stringhe.
(list "a" "b" "c")

; Lista di liste.
(list (list 1 2) (list "a") (list))

E via discorrendo fino ad avere contortissimi costrutti di liste piene di liste di liste. E’ importante notare che data una lista (a b c d … z) Scheme interpreta sempre il primo elemento di una lista come un comando. Quindi quando vogliamo indicare una lista pura dobbiamo sempre usare come primo elemento il comando list.

DEFINIZIONI

In Scheme tutte le definizioni, siano esse di variabili intere, stringhe, ma anche funzioni e procedure sono definite grazie al comando define.


1
2
3
4
5
; Variabile numerica.
(define pippo 3)

; Stringa.
(define pluto "Ciao")

E come abbiamo detto anche le funzioni possono essere definite in questo modo.

(define (somma a b) (+ a b))

Ecco che abbiamo definito una semplice funzione somma che potrà essere richiamata così:

(somma 3 4)

Una funzione è quindi definita secondo il formato:

(define (nomefunzione parametro1 parametro2 .... parametroN) (corpo della funzione))

RICAPITOLANDO:

  • Scheme è un dialetto del LISP.
  • Scheme è un linguaggio multiparadigma incentrato però sul paradima funzionale.
  • In Scheme ogni cosa racchiusa fra parentesi è un lista.
  • In Scheme ogni cosa che non è una lista si chiama Atomo (numeri, stringhe e altro).
  • In Scheme si utilizza esclusivamente la notazione prefissa anche per le operazioni aritmetiche.
  • In Scheme tutto si definisce con il comando define. Sia variabili che costanti che funzioni.
  • In Scheme il primo elemento di una lista è sempre visto come un comando.

3 comments on “Scheme – Lezione 1 – Introduzione

  1. blog appena scoperto che metto subito nella lista degli RSS, magari cancellandone un paio di quelli barbosi 😉 (ma anche 😀 )

  2. Ciao all’università non ci acchiappo molto di logica per cui sono alla disperata ricerca di elementi che me la facciano vedere dal un punto di vista meno astratto .

    Quando il professore ha chiesto se avevamo mai sentito parlare del lisp ho subito pensato al tuo blog, penso che studierò sul tuo blog XD.