" Programação Funcional Pura ", em sua definição formal, trata da idéia de projetar máquinas computacionais cuja saída é puramente "uma função da entrada na máquina" . Se você alimentar a mesma entrada na máquina, ela produzirá a mesma saída. Cada entrada é nomeada explicitamente para que você saiba exatamente quais são as dependências. Uma linguagem de programação funcional pura impõe isso rigorosamente.
No entanto ... na linha de base "Rebol", você pode escrever coisas como:
foo: function [value [integer!]] [
either now/date = 20-Feb-2013 [
value + 1
] [
value
]
]
Aqui vemos uma função que retorna sua entrada inteira todos os dias, mas hoje, onde você obtém o valor mais um. Inclui uma dependência invisível na data que não é formalmente especificada como argumento para a função. É o tipo de coisa que faz as pessoas e os formalistas de software de Haskell gritarem assassinato sangrento.
Daí Rebol não é puro fora funcional da caixa. (... mas continue a ler ...)
A definição menos rigorosa de programação funcional é quando as funções podem atuar como valores na linguagem. Assim, você pode atribuir uma função a uma variável e usá-la mais tarde. Nesse sentido, você pode ler como uma linguagem funcional javascript e ver que a definição arriscada levaria algumas pessoas a dizer que Javascript é uma linguagem funcional. Se você for tão frouxo com a definição, isso seria "funcional":
>> foo: does [a + 10]
>> a: 20
>> print foo
== 30
(Nota: DOES é uma conveniência para definir uma função sem argumentos, que possui apenas um corpo.)
Não sei se consideraria isso (ou JavaScript) adequado ao que as pessoas com quem converso chamariam de programação funcional. YMMV.
Se você passa algum tempo em ciência da computação, aprende coisas como Turing Tarpits e computabilidade e esse tipo de princípios de equivalências em que "se você pode conectar X a Y, Z será verdadeiro". E assim como você pode escrever uma implementação Haskell em C e depois se restringir a usar apenas chamadas C mapeadas na biblioteca Haskell, você pode afirmar que está fazendo "programação funcional" e estar tecnicamente correto.
Portanto, se você quiser dizer que o Rebol pode se dedicar a estilos de programação funcional, você pode ser um pessimista e dizer "bem, não é melhor do que fingir que você está fazendo C quando está realmente usando um subconjunto confinado da linguagem que você" re usando Haskell por proxy " . O truque na manga de Rebol é a facilidade com que você desliza de um paradigma de "discagem" para outro. Escrevendo a-específico do idioma de domínio pouco que acontece para ser funcional é tão fácil e natural que ele não se sente como se estivesse torcendo seu idioma fora do comum para fazê-lo. A capacidade de criar linguagens específicas de domínio com caráter funcional leva à rotulação do Rebol como "paradigma neutro" .
Muitas pessoas misturam Rebol com seu dialeto mais comum (o dialeto DO) e pensam "é isso que Rebol é". Mas a "essência" da Rebol é mais parecida com XML, é um formato de troca de dados que coincidentemente (ok, não coincidentemente) possui código hiper-otimizado, concentrando-se em processá-lo de algumas maneiras. Para uma boa leitura de segundo plano sobre como ele supera o XML, consulte XML foi defeituoso desde o início por Carl Sassenrath, da fama do AmigaOS (e agora Rebol).