Rebol è un linguaggio di programmazione funzionale?


9

Mi sono imbattuto in Rebol e me ne stavo chiedendo.

Mi sono imbattuto nel seguente script da qui :

 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
 ]

Tutte le operazioni di manipolazione della raccolta come map-eachmi ricordano JavaScript e C # che hanno entrambe capacità funzionali.

Rebol è un linguaggio funzionale? Supporta la programmazione funzionale? Si classificherebbe come un linguaggio funzionale puro (PFL)?


5
Ecco una risposta dal creatore di REBOL: REBOL è un linguaggio funzionale puro?
Greg Hewgill,

1
@GregHewgill Grazie per quella risorsa. Ho posto questa domanda dopo una chat nella chat room StackOverflow Rebol ( chat.stackoverflow.com/transcript/message/7836761#7836761 ). Essi (Noi) pensato che poiché non v'è alcuna informazione su questo sul programmatori o altri siti in StackExchange dovrei chiedere qui per riferimenti futuri. Questo link è fantastico ma potrebbe essere ampliato e spiegato qui in modo che più utenti che non hanno esperienza con i programmatori Rebol possano capirlo. Una risposta con citazioni da quell'articolo ed esperienza di sviluppo personale sarebbe apprezzata.
Benjamin Gruenbaum,

Gli attributi migliorano a malapena lo scenario XML di Carl: hai ancora metadati in eccesso (i nomi degli attributi) e valori non tipizzati (il contenuto degli attributi). I metadati impliciti di Rebol forniti dai tipi accuratamente definiti eliminano un onere oneroso per l'interpretazione. Con XML, devi prima sbloccare i valori, quindi decifrarli (come viene definita una data in XML — devo controllare le specifiche RSS o Atom? Puoi esprimere la definizione in XML?), E quindi eventualmente validarli, solo allora tu può valutare il loro contesto. ** Destinato a un commento in risposta a [questo commento] ( programmers.stackexchange.com/questions/1

Risposte:


13

" Pura programmazione funzionale" 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 è chiamato esplicitamente in modo da sapere esattamente quali sono le dipendenze. Un linguaggio di programmazione funzionale puro lo impone rigorosamente.

Eppure ... nella baseline "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 dalla data che non è specificata formalmente come argomento della funzione. È il genere di cose che fa sì che le persone e i formalisti software di Haskell come me urlino un sanguinoso omicidio.

Quindi Rebol non è un prodotto funzionale pronto all'uso . (... ma continua a leggere ...)

La definizione meno rigorosa di programmazione funzionale è quando le funzioni possono agire come valori nel linguaggio. Quindi puoi assegnare una funzione a una variabile e usarla in seguito. In questo senso, puoi leggere come javascript è un linguaggio funzionale e vedere che la definizione rischiosa porterebbe alcune persone a dire che Javascript è un linguaggio funzionale. Se stai per essere così 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 lo prenderei in considerazione (o JavaScript) per adattarsi a ciò che le persone con cui parlo chiamerebbero programmazione funzionale. YMMV.

Se passi del tempo in informatica, scopri cose come Taring di Turing, la calcolabilità e questo tipo di principi di equivalenza in cui "se riesci a connettere X a Y, allora Z sarà vero". E proprio come puoi scrivere un'implementazione di Haskell in C, e quindi limitarti a usare solo le chiamate C mappate nella libreria di Haskell, potresti affermare che stai facendo "programmazione funzionale" ed essere tecnicamente corretto.

Quindi, se volessi dire che Rebol può essere piegato a stili di programmazione funzionale, potresti essere un pessimista e dire "beh, non è meglio che fingere di fare C quando in realtà stai usando un sottoinsieme così limitato del linguaggio che" riutilizzando Haskell per procura " . Il trucco della manica di Rebol è la facilità con cui scivoli da un paradigma "dialettale" a un altro. Scrivere un piccolo linguaggio specifico per un dominio che sembra essere funzionale è così facile e naturale che non sembra che tu stia distorcendo la tua lingua per farlo. La capacità di rendere linguaggi specifici di dominio che hanno carattere funzionale porta all'etichettatura di Rebol come "paradigma neutrale" .

Molte persone mescolano Rebol con il suo dialetto più comune (il dialetto DO) e pensano "questo è Rebol". Ma l '"essenza" di Rebol è più simile all'XML, è un formato di scambio di dati che per coincidenza (va bene, non a caso) ha un codice iper-ottimizzato che si concentra sull'elaborarlo in alcuni modi fuori dagli schemi. Per una buona lettura di base su come battere i pantaloni dall'XML, vedi Was XML imperfetto dalla fama Start di Carl Sassenrath di AmigaOS (e ora Rebol).


1
È un'ottima risposta, ma penso che l'articolo "Was XML imperfetto dall'inizio" sia piuttosto negativo. Innanzitutto usa un XML scadente (tutto ciò che rappresenta con l'annidamento può essere rappresentato con attributi). In secondo luogo, le lingue sono rappresentate da una struttura ad albero che ricorda xml. Quando si analizza una frase si ottiene un albero di analisi, non è corretto confrontare l'XML che contiene le informazioni sulla grammatica con la stringa specifica del dominio. Grazie per la risposta :)
Benjamin Gruenbaum,

2
Sono un Rebol n00b e come hai già detto, anche io sto pensando fin da ora che Rebol è il dialetto DO. Spero di uscire da questa mentalità. :-)
KK.

1
@BenjaminGruenbaum Se potessi modificare il sito Web di Carl, credimi, lo farei. :-)
HostileFork dice che non fidarti di SE il

@BenjaminGruenbaum Ma non tutte le lingue possono manipolare liberamente quella struttura ad albero. Rebol è molto gentile in questo senso.
Izkata,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.