Question

Plusieurs questions sur les langages de programmation fonctionnels m'ont amené à réfléchir à la question de savoir si XSLT est un langage de programmation fonctionnel. Si non, quelles fonctionnalités sont manquantes? XSLT 2.0 a-t-il raccourci ou réduit l'écart?

Était-ce utile?

La solution

XSLT est déclaratif par opposition à stateful.

Bien que XSLT soit basé sur des idées de programmation fonctionnelle, il ne s’agit pas d’un langage de programmation fonctionnel complet, mais il n’est pas en mesure de traiter les fonctions comme un type de données de première classe. Il comporte des éléments tels que l’évaluation paresseuse pour réduire les évaluations inutiles et l’absence de boucles explicites.

Comme pour un langage fonctionnel, j’imagine qu’il peut être parfaitement parallélisé avec un multi-threading sécurisé et automatique entre plusieurs processeurs.

De Wikipedia sur XSLT :

  

En tant que langage, XSLT est influencé par   langages fonctionnels, et par   langues de correspondance de modèle basées sur du texte   comme SNOBOL et awk. C'est le plus direct   prédécesseur était DSSSL, un langage qui   remplit la même fonction pour SGML   que XSLT effectue pour XML. XSLT peut   aussi être considéré comme un modèle   processeur.

Voici un excellent site sur l’utilisation de XSLT en tant que langage fonctionnel à l’aide de FXSL. FXSL est une bibliothèque qui implémente la prise en charge de fonctions d'ordre supérieur.

À cause de FXSL, je ne pense pas que XSLT ait besoin d’être entièrement fonctionnel. Peut-être que FXSL sera inclus à l'avenir comme standard W3C, mais je n'ai aucune preuve de cela.

Autres conseils

Je suis sûr que vous avez déjà trouvé ce lien :-) http: //fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html .

Les fonctions bien dans XSLT sont des citoyens de première classe avec quelques solutions de rechange après tout: -)

C’est un peu ce que je ressens lorsque je le programme.

XSLT est entièrement basé sur la définition de fonctions et leur application aux événements sélectionnés dans le flux d'entrée.

XSLT vous permet de définir une variable. La programmation fonctionnelle ne permet pas aux fonctions d’avoir des effets secondaires - c’est un gros problème.

Néanmoins, en écrivant en XSLT, on a le même "sentiment de travailler comme un homme à la mode." Vous travaillez avec l'entrée - vous ne la modifiez pas - pour créer une sortie.

Il s’agit d’un modèle de programmation très, très différent de celui utilisé avec l’API DOM. DOM ne sépare pas l'entrée et la sortie du tout. Vous recevez une structure de données - et vous la modifiez comme bon vous semble - sans hésitation, restriction ou remords.

Il suffit de dire que si vous aimez la PF et les principes qui la sous-tendent, vous vous sentirez probablement à l'aise de travailler dessus. Tout comme l'expérience avec la programmation événementielle - et XML lui-même - vous mettra à l'aise avec elle aussi.

Si votre seule expérience concerne des programmes descendants et non pilotés par des événements, alors XSLT sera un paysage vraiment peu familier et étranger. Au moins au début. Si vous gagnez un peu d’expérience et que vous revenez ensuite à XSLT lorsque les expressions XPath et la gestion des événements sont vraiment à l’aise, vous rapporterez beaucoup.

Généralement, XSLT n'est pas un langage de programmation 100% fonctionnel, c'est son incapacité à traiter les fonctions comme un type de données de première classe.

Il y en a peut-être d'autres, mais c'est la réponse évidente.

Bonne chance!

Saxon-SA a introduit quelques fonctions d’extension qui rendent XSLT fonctionnel. Vous pouvez utiliser saxon: function () pour créer une valeur de fonction (en réalité un {http: //net.sf.saxon/java-type} net.sf.saxon.expr .UserFunctionCall que vous appelez ensuite avec saxon: call () .

Saxon-B a des fonctionnalités similaires avec l'association de saxon: expression () et saxon: eval () . La différence est que saxon: expression () prend n'importe quelle expression XPath et que saxon: eval () l’évalue, alors que saxon: function () prend le nom d'une fonction que saxon: call () appelle.

Ce n’est pas vraiment un argument, car vous ne pouvez déclarer que des variables, pas changer leurs valeurs après la déclaration. En ce sens, il s'agit d'un style déclaratif et non impératif, comme indiqué dans l'article de M. Novatchev.

Les langages de programmation fonctionnels tels que Scheme ou Erlang vous permettent également de déclarer des variables. Vous pouvez également le faire en Haskell:

- La fonction 'test' prend la variable x et l'ajoute à chaque élément de la liste xs

test :: [Int] -> [Int]
test xs = map (+ x) xs
where x = 2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top