Ist Rebol eine funktionierende Programmiersprache?

9

Ich traf Rebol und wunderte mich darüber.

Von hier aus bin ich auf folgendes Skript gestoßen :

 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
 ]

Alle Operationen zur Manipulation von Sammlungen map-eacherinnern mich an JavaScript und C #, die beide über funktionale Fähigkeiten verfügen.

Ist Rebol eine funktionale Sprache? Unterstützt es funktionale Programmierung? Würde es als reine funktionale Sprache (PFL) klassifiziert?

Benjamin Gruenbaum
quelle
5
Hier ist eine Antwort des Erstellers von REBOL: Ist REBOL eine reine funktionale Sprache?
Greg Hewgill
1
@ GregHewgill Vielen Dank für diese Ressource. Ich habe diese Frage nach einem Chat im Chatroom von StackOverflow Rebol gestellt ( chat.stackoverflow.com/transcript/message/7836761#7836761 ). Sie (wir) stellten fest, dass ich , da es auf StackExchange keine Informationen dazu auf Programmierern oder anderen Websites gibt, hier um zukünftige Referenz bitten sollte. Dieser Link ist großartig, könnte aber hier erweitert und erklärt werden, damit mehr Benutzer, die keine erfahrenen Rebol-Programmierer sind, ihn verstehen können. Eine Antwort mit Zitaten aus diesem Artikel und persönlicher Entwicklungserfahrung wäre willkommen.
Benjamin Gruenbaum
Attribute verbessern Carls XML-Szenario kaum: Sie haben immer noch überschüssige Metadaten (die Attributnamen) und untypisierte Werte (den Attributinhalt). Die impliziten Metadaten von Rebol, die durch die sorgfältig definierten Typen bereitgestellt werden, entlasten die Interpretation angemessen. Bei XML müssen Sie zuerst Werte entsperren, dann entschlüsseln (wie wird ein Datum in XML definiert - soll ich die RSS- oder Atom-Spezifikation überprüfen? Können Sie die Definition in XML ausdrücken?) Und sie möglicherweise erst dann validieren können ihren Kontext bewerten. ** Als Kommentar als Antwort auf [diesen Kommentar]

Antworten:

13

Bei " Pure Functional Programming" geht es in seiner formalen Definition um die Idee, Rechenmaschinen zu entwerfen, deren Ausgabe lediglich "eine Funktion der Eingabe in die Maschine" ist . Wenn Sie dieselbe Eingabe in die Maschine einspeisen, wird dieselbe Ausgabe erzeugt. Jede Eingabe wird explizit benannt, damit Sie genau wissen, welche Abhängigkeiten bestehen. Eine rein funktionale Programmiersprache setzt dies konsequent durch.

Doch ... in der Grundlinie "Rebol" können Sie Dinge schreiben wie:

foo: function [value [integer!]] [
    either now/date = 20-Feb-2013 [
        value + 1
    ] [
        value
    ]
]

Hier sehen wir eine Funktion, die an jedem Tag, aber heute, ihre ganzzahlige Eingabe zurückgibt, wobei Sie den Wert plus eins erhalten. Es enthält eine unsichtbare Abhängigkeit vom Datum, die nicht formal als Argument für die Funktion angegeben ist. Es ist die Art von Dingen, die Haskell-Leute und Software-Formalisten wie mich dazu bringen, blutigen Mord zu schreien.

Daher ist Rebol nicht rein funktional aus dem Kasten heraus . (... aber lesen Sie weiter ...)

Die weniger strenge Definition der funktionalen Programmierung ist, wenn Funktionen als Werte in der Sprache fungieren können. So können Sie einer Variablen eine Funktion zuweisen und später verwenden. In diesem Sinne können Sie lesen, wie Javascript eine funktionale Sprache ist, und sehen, dass die heikle Definition einige Leute dazu bringen würde, zu sagen, dass Javascript eine funktionale Sprache ist. Wenn Sie mit der Definition so locker sein wollen, dann wäre dies "funktional":

>> foo: does [a + 10]

>> a: 20

>> print foo
== 30

(Hinweis: DOES ist eine Annehmlichkeit zum Definieren einer Funktion ohne Argumente, die nur einen Text enthält.)

Ich weiß nicht, ob ich das (oder JavaScript) für das halten würde, was ich als funktionale Programmierung bezeichne. YMMV.

Wenn Sie Zeit in der Informatik verbringen, lernen Sie Dinge wie Turing Tarpits und Berechenbarkeit sowie diese Art von Äquivalenzprinzipien kennen, bei denen "wenn Sie X mit Y verbinden können, dann ist Z wahr". Und genau wie Sie eine Haskell-Implementierung in C schreiben und sich dann darauf beschränken können, nur C-Aufrufe zu verwenden, die der Haskell-Bibliothek zugeordnet sind, können Sie behaupten, dass Sie "funktionale Programmierung" durchführen und technisch korrekt sind.

Wenn Sie also sagen möchten, dass Rebol auf funktionale Programmierstile ausgerichtet sein kann, könnten Sie ein Pessimist sein und sagen: " Nun, es ist nicht besser, als so zu tun, als würden Sie C machen, wenn Sie tatsächlich eine so begrenzte Teilmenge der Sprache verwenden, dass Sie." Verwenden Sie Haskell per Proxy " . Der Trick in Rebols Ärmel ist, wie leicht Sie von einem "Dialekt" -Paradigma zum anderen wechseln können. Das Schreiben einer kleinen domänenspezifischen Sprache, die zufällig funktionsfähig ist, ist so einfach und natürlich, dass es sich nicht so anfühlt, als würden Sie Ihre Sprache aus dem Gelenk verdrehen, um dies zu tun. Die Fähigkeit, domänenspezifische Sprachen mit funktionalem Charakter zu erstellen, führt dazu, dass Rebol als "paradigmenneutral" eingestuft wird .

Viele Leute verwechseln Rebol mit seinem gebräuchlichsten Dialekt (dem DO-Dialekt) und denken, "das ist Rebol". Aber Rebols "Essenz" ähnelt eher XML, es ist ein Datenaustauschformat, das zufällig (okay, nicht zufällig) hyperoptimierten Code enthält, der sich darauf konzentriert, ihn auf bestimmte Weise sofort zu verarbeiten. Eine gute Hintergrundinformation darüber, wie es XML übertrifft , finden Sie unter War XML von Anfang an fehlerhaft von Carl Sassenrath von AmigaOS (und jetzt Rebol).

HostileFork sagt, vertraue SE nicht
quelle
1
Das ist eine großartige Antwort, aber ich denke, der Artikel "War XML von Anfang an fehlerhaft" ist ziemlich schlecht. Erstens verwendet er schlechtes XML (alles, was er mit Verschachtelung darstellt, kann mit Attributen dargestellt werden). Zweitens Sprachen werden von einem Baum wie Struktur dargestellt , die xml ähnelt. Wenn Sie einen Satz analysieren, erhalten Sie einen Analysebaum. Es ist nicht fair, das XML, das die Grammatikinformationen enthält, mit der Zeichenfolge zu vergleichen, die domänenspezifisch ist. Danke für die Antwort :)
Benjamin Gruenbaum
2
Ich bin ein Rebol n00b und wie Sie gesagt haben, denke auch ich ab sofort, dass Rebol der DO-Dialekt ist. Ich hoffe, aus dieser Denkweise auszubrechen. :-)
KK.
1
@BenjaminGruenbaum Wenn ich Carls Website bearbeiten könnte, glauben Sie mir, ich würde. :-)
HostileFork sagt, traue SE
@BenjaminGruenbaum Aber nicht alle Sprachen können diese Baumstruktur frei manipulieren. Rebol ist in dieser Hinsicht sehr lispig.
Izkata