Frage

Einige Fragen zu funktionalen Programmiersprachen haben mich darüber nachzudenken, ob bekommen XSLT ist eine funktionale Programmiersprache. Wenn nicht, welche Funktionen fehlen? Hat XSLT 2.0 verkürzt oder die Lücke geschlossen?

War es hilfreich?

Lösung

XSLT ist deklarative im Gegensatz zu Stateful.

Obwohl XSLT auf dem funktionalen Programmierung Ideen basiert, ist es nicht eine vollständige funktionale Programmiersprache, es fehlt die Fähigkeit, als ein ersten Klasse Datentyp zu behandeln. Es hat Elemente wie lazy evaluation nicht benötigte Auswertung zu reduzieren und auch das Fehlen von expliziten Schleifen.

Wie eine funktionale Sprache aber ich würde denken, dass es gut mit automatischem sicherem Multi-Threading über mehrere Prozessoren parallelisiert werden.

Wikipedia über XSLT :

  

Als Sprache wird XSLT beeinflusst durch   funktionale Sprachen, und durch   textbasierte Mustererkennung Sprachen   wie SNOBOL und awk. Seine unmittelbarste   Vorgänger war DSSSL, eine Sprache, die   die gleiche Funktion ausgeführt für SGML   dass XSLT führt für XML. XSLT kann   auch als Vorlage betrachtet werden   Prozessor.

Hier ist ein großer Ort auf mit XSLT als funktionale Sprache mit Hilfe von FXSL. FXSL ist eine Bibliothek, die Unterstützung für Funktionen höherer Ordnung implementiert.

Durch FXSL glaube ich nicht, dass XSLT ein Bedürfnis voll funktionsfähig zu sein, muss sich. Vielleicht wird FXSL als W3C-Standard in der Zukunft aufgenommen werden, aber ich habe keine Beweise dafür.

Andere Tipps

Ich bin sicher, euch diesen Link gefunden haben :-) http: //fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html .

Nun Funktionen in XSLT sind erste Klasse-Bürger mit einigen Workarounds schließlich: -)

Das ist eine Art, wie es sich anfühlt, wenn ich es bin Programmierung.

XSLT basiert vollständig auf Funktionen zu definieren und sie an ausgewählte Ereignisse anwenden, die den Eingangsstrom kommen.

XSLT können Sie eine Variable. Funktionale Programmierung erlaubt keine Funktionen Nebenwirkungen zu haben -. Und das ist ein großes Problem

Still, in XSLT schreiben, man denselben hat „das Gefühl, wie es in einer FP Art und Weise arbeiten Sie arbeiten mit Eingang -. Sie ändern sich nicht -. Ausgabe erstellen

Dies ist ein sehr, sehr unterschiedliches Programmiermodell von der verwendet wird, wenn mit dem DOM-API arbeiten. DOM trennt nicht Eingang und Ausgang überhaupt. Sie sind eine Datenstruktur übergeben - und Sie es mangle, wie Sie für richtig halten -. Ohne zu zögern, Einschränkung oder Reue

Es genügt, wenn Sie wie FP und die Prinzipien dahinter zu sagen, werden Sie wahrscheinlich wohl fühlen in sie. Genau wie Erfahrung mit der Programmierung ereignisgesteuert - und XML selbst. - werden Sie mit ihm macht komfortabel und

Wenn Ihr nur Erfahrung mit Top-down, nicht ereignisgesteuerte Programme - dann wird XSLT sehr ungewohnt, fremd Landschaft in der Tat. Zumindest auf den ersten. Wachsende ein wenig Erfahrung und kommen dann zurück zu XSLT, wenn XPath-Ausdrücke und Event-Handling wirklich bequem sind Sie auszahlen wird.

Für den größten Teil, was macht XSLT nicht 100% funktionale Programmiersprache ist es Unfähigkeit ist Funktionen als First-Class-Datentyp zu behandeln.

Es kann einige andere sein -. Aber das ist die offensichtliche Antwort

Viel Glück!

Saxon-SA hat einige Erweiterungsfunktionen eingeführt, die XSLT funktionsfähig zu machen. Sie können saxon:function() einen Funktionswert (eigentlich ein {http://net.sf.saxon/java-type}net.sf.saxon.expr.UserFunctionCall Wert), die Sie rufen dann mit saxon:call().

erstellen

Saxon-B hat eine ähnliche Funktionalität mit der Paarung von saxon:expression() und saxon:eval(). Der Unterschied besteht darin, dass saxon:expression() nimmt jeden XPath-Ausdruck, und saxon:eval() wertet sie aus, während saxon:function() den Namen einer Funktion nimmt die Anrufe saxon:call().

das ist nicht wirklich ein Argument, da Sie nur Variablen deklarieren, nicht ihre Werte nach Erklärung ändern. In diesem Sinne ist es deklarative nicht zwingend notwendig, Stil, wie in Herrn Novatchev des Artikel angegeben.

Funktionale Programmiersprachen wie Scheme oder Erlang können Sie Variablen als auch erklären, und in Haskell können Sie auch das tun:

- Funktion 'Test' nimmt Variable x und fügt sie auf jedes Element der Liste xs

test :: [Int] -> [Int]
test xs = map (+ x) xs
where x = 2
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top