FP (Function Programming) è un linguaggio ideato da John Backus e presentato nel 1977 all’ACM Turing award lecture[1]. Il linguaggio non ha variabili, ma solo funzioni ed operazioni su funzioni
In FP vi sono:
Io version:
20070226 Input:
Def IP:Insert +.Forall *.Transpose
Command: Def IP Input:
IP:1 2 3:3 4 5
Command: IP
Command: Transpose Command: Forall *
Command: Insert + 26 Input:
Def Fact:Insert *.Natural
Command: Def Fact Input:
Fact:7
Command: Fact
Command: Natural
Command: Insert * 5040 Put
command Fact:2 Input:
Fact:2
Command: Fact
Command:
Natural
Command: Insert * 2 Press
any key to exit |
· oggetti cioè atomi (numeri, caratteri, simboli, Vero e Falso), ed insiemi di atomi, compreso anche l’atomo "bottom", indicato con ┴ , che rappresenta il risultato di funzioni che non terminano o che non hanno risultato, come la divisione per 0,
· funzioni su oggetti che restituiscono oggetti, l’associazione fra funzione e oggetto è l’operatore : detto application,
· Forme funzionali, cioè funzioni su funzioni.
I simboli qui utilizzati, differiscono, in parte,
da quelli dell’articolo di Backus.
Vi sono funzioni aritmetiche e su oggetti, di fatto
liste.
Esempi di funzionali sono:
Insert op (/), inserisce op fra gli oggetti.
Nel linguaggio si possono definire funzioni
combinando funzioni e funzionali:
Def
IP:Insert +.Forall *.Transpose
Nell’esempio
è riportata l’esecuzione di alcune funzioni FP (con
"l’invenzione" della funzione Natural).
L’interprete è stato scritto con il linguaggio IO (v. IO
par. 2.37
).
Nello stesso articolo è presentato FFP (Formal FP) una estensione con la possibilità di definire nuovi funzionali e l’introduzione della gestione della memoria, sostanzialmente per memorizzare risultati intermedi. Backus propone poi una nuova classe di sistemi di calcolo utilizzanti lo stile funzionale e che chiama AST (Applicative StateTtransition).
FL (Function Level) è una conseguenza delle idee alla base di FP ed è creato all’ IBM Almaden Research Center in collaborazione con John Williams e Edward Wimmers nel 1989.
[1]
"Can
programming be liberated from the von Neumann style?", John Backus,
Communications of the ACM, 21, 8, pp.613-641, 1978