Rebol é uma linguagem de programação funcional?

9

Encontrei Rebol e fiquei pensando sobre isso.

Encontrei o seguinte script a partir daqui :

 use [feed questions answers][
    feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol
    questions: map-each entry feed/get-by-tag <entry> [
        find/match entry/get <id> "http://stackoverflow.com/q/"
    ]

    answers: make block! length? questions

    foreach question questions [
        question: load-xml/dom join http://stackoverflow.com/feeds/question/ question
        foreach entry next question/get-by-tag <entry> [append answers entry/tree]
    ]

    insert clear feed/find-element <entry> answers
    feed/flatten
 ]

Todas as operações de manipulação de coleções, como o map-eachJavaScript e o C #, têm habilidades funcionais.

Rebol é uma linguagem funcional? Suporta programação funcional? Classificaria como uma linguagem funcional pura (PFL)?

Benjamin Gruenbaum
fonte
5
Aqui está uma resposta do criador do REBOL: REBOL é uma linguagem funcional pura?
21413 Greg Hewgill
11
@GregHewgill Obrigado por esse recurso. Fiz essa pergunta depois de um bate-papo na sala de bate-papo StackOverflow Rebol ( chat.stackoverflow.com/transcript/message/7836761#7836761 ). Eles (nós) imaginaram que, como não informações sobre isso em programadores ou outros sites no StackExchange, eu deveria pedir aqui para referência futura. Esse link é ótimo, mas pode ser expandido e explicado aqui para que mais usuários que não são programadores experientes da Rebol possam entendê-lo. Uma resposta com citações desse artigo e experiência em desenvolvimento pessoal seria apreciada.
Benjamin Gruenbaum
Os atributos mal melhoram o cenário XML de Carl: você ainda possui excesso de metadados (os nomes dos atributos) e valores não digitados (o conteúdo do atributo). Os metadados implícitos da Rebol, fornecidos pelos tipos cuidadosamente definidos, eliminam um ônus justo na interpretação. Com o XML, você deve primeiro desbloquear os valores e decifrá-los (como uma data é definida em XML - devo verificar as especificações RSS ou Atom? Você pode expressar a definição em XML?) E, em seguida, possivelmente validá-los, só então você pode avaliar seu contexto. ** Pretendido como um comentário em resposta a [este comentário] ( programmers.stackexchange.com/questions/1

Respostas:

13

" 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).

HostileFork diz que não confia no SE
fonte
11
Essa é uma ótima resposta, mas acho que o artigo "O XML estava com defeito desde o início" é muito ruim. Primeiro, ele usa XML ruim (tudo o que ele representa com o aninhamento pode ser representado com atributos). Segundo, os idiomas são representados por uma árvore como estrutura que se assemelha a xml. Quando você analisa uma frase, obtém uma árvore de análise, não é justo comparar o XML que contém as informações da gramática com a string específica do domínio. Obrigado pela resposta :)
Benjamin Gruenbaum
2
Eu sou um Rebol n00b e, como você disse, também estou pensando agora que Rebol é o que o dialeto DO é. Espero sair dessa mentalidade. :-)
KK.
11
@BenjaminGruenbaum Se eu pudesse editar o site de Carl, acredite, eu faria. :-)
HostileFork disse que não confia em SE 21/02
@BenjaminGruenbaum Mas nem todos os idiomas podem manipular livremente essa estrutura em árvore. Rebol é muito sincero a esse respeito.
precisa saber é o seguinte