" Pure Programming Programming" nella sua definizione formale riguarda l'idea di progettare macchine computazionali il cui output è puramente "una funzione dell'input alla macchina" . Se si alimenta lo stesso input nella macchina, produrrà lo stesso output. Ogni input è denominato esplicitamente in modo da sapere esattamente quali sono le dipendenze. Un puro linguaggio di programmazione funzionale impone questo rigorosamente.
Tuttavia ... nella linea di base "Rebol" puoi scrivere cose come:
foo: function [value [integer!]] [
either now/date = 20-Feb-2013 [
value + 1
] [
value
]
]
Qui vediamo una funzione che restituisce il suo input intero ogni giorno, ma oggi, dove ottieni il valore più uno. Include una dipendenza invisibile alla data che non è formalmente specificata come argomento della funzione. È il genere di cose che rende Haskell persone e formatori di software come me urlano un sanguinoso omicidio.
Quindi Rebol non è pure funzionale pronto all'uso. (... ma continua a leggere ...)
La definizione meno rigida della programmazione funzionale è quando le funzioni possono agire come valori nella lingua. Quindi puoi assegnare una funzione a una variabile e usarla in seguito. In questo senso, puoi leggere le espressioni di tipo è javascript una lingua funzionale e vedere che la definizione rischiosa indurrebbe alcune persone a dire che Javascript è un linguaggio funzionale. Se hai intenzione di essere libero con la definizione, questo sarebbe "funzionale":
>> foo: does [a + 10]
>> a: 20
>> print foo
== 30
(Nota: DOES è una comodità per definire una funzione senza argomenti, che ha solo un corpo.)
Non so che considererei questo (o JavaScript) adatto a ciò che le persone con cui parlo chiamerebbero programmazione funzionale. YMMV.
Se passi un po 'di tempo in informatica, impari cose come Turing Tarpits e computability e questi tipi di principi di equivalenze dove "se riesci a connettere X a Y allora Z sarà vero". E proprio come puoi scrivere un'implementazione Haskell in C, e poi limitarti a usare solo le chiamate C mappate nella libreria Haskell, potresti affermare che stai facendo "programmazione funzionale" ed essere tecnicamente corretto.
Quindi se vuoi dire che Rebol può essere piegato a stili di programmazione funzionali, potresti essere un pessimista e dire "beh non è meglio che fingere di fare C quando stai usando un sottoinsieme così ristretto della lingua che stai usando Haskell per proxy ". Il trucco della manica di Rebol è la facilità con cui scivoli da un paradigma "dialettico" a un altro. Scrivere un piccolo linguaggio specifico del dominio che accade per essere funzionale è così facile e naturale che non sembra che tu stia distorcendo la tua lingua fuori dal comune per farlo. La possibilità di creare linguaggi specifici di dominio con carattere funzionale porta all'etichettatura di Rebol come "paradigm neutral" .
Molte persone mescolano Rebol con il suo dialetto più comune (il dialetto DO) e pensano "questo è ciò che Rebol è". Ma l'essenza di Rebol è più simile all'XML, è un formato di scambio di dati che per coincidenza (okay, non a caso) ha un codice iper-ottimizzato che si concentra sull'elaborazione in certi modi fuori dalla scatola. Per una buona lettura di fondo su come batte i pantaloni off XML, vedi Was XML difettoso dall'inizio di Carl Sassenrath di AmigaOS (e ora Rebol).