Pregunta

Varias preguntas acerca de los lenguajes de programación funcional me hace pensar en si XSLT es un lenguaje de programación funcional.Si no, ¿qué características son las que faltan?Ha XSLT 2.0 acorta o se cierra la brecha?

¿Fue útil?

Solución

XSLT es declarativo frente al estado.

Aunque XSLT se basa en la programación funcional ideas, no es un completo lenguaje de programación funcional, carece de la habilidad para el tratamiento de las funciones como de primera clase de tipo de datos.Tiene elementos como la evaluación diferida para reducir innecesarios de evaluación y también la ausencia explícita de bucles.

Como un funcional de la lengua, aunque, yo creo que puede ser muy bien paralelizado con seguro automático multi threading, a través de varios procesadores.

De Wikipedia en XSLT:

Como un lenguaje, XSLT es influenciado por los lenguajes funcionales, y por texto basado en la coincidencia de patrón de idiomas como SNOBOL y awk.Su más directo predecesor fue DSSSL, un idioma que realiza la misma función para SGML que XSLT realiza para XML.XSLT puede también puede ser considerada como una plantilla el procesador.

Aquí es un gran sitio sobre el uso de XSLT como un lenguaje funcional con la ayuda de FXSL.FXSL es una biblioteca que implementa la compatibilidad con funciones de orden superior.

Porque de FXSL no creo que XSLT tiene una necesidad de ser totalmente funcional en sí mismo.Tal vez FXSL será incluido como un estándar de W3C en el futuro, pero no tengo pruebas de esto.

Otros consejos

Estoy seguro de que ustedes han encontrado este enlace, por ahora :-) http://fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html .

Además de las funciones XSLT son de primera clase-los ciudadanos con algunas formas de resolver después de todo :-)

Que es una especie de lo que se siente cuando estoy programando.

XSLT es totalmente basado en la definición de funciones y su aplicación a eventos a los que vienen abajo de la secuencia de entrada.

XSLT permite establecer una variable.La programación funcional no permite que las funciones que tengan efectos secundarios - y eso es un problema.

Aún así, la escritura en XSLT, uno tiene el mismo "sentir como trabajar en una FP de la moda.Se trabaja con la entrada no va a cambiar - para crear una salida.

Este es un muy, muy diferente del modelo de programación de la que se utiliza cuando se trabaja con la API del DOM.DOM no separados de entrada y salida.Se le entregó una estructura de datos - y mangle es la manera de ver fit - sin dudarlo, restricción o remordimiento.

Baste decir si te gusta la FP y los principios que detrás de ella, probablemente se sienta cómodo trabajando en ella.Como la experiencia con eventos dirigidos a la programación y XML en sí - va a hacer que se sienta cómodo con él.

Si su única experiencia es con la parte superior hacia abajo, no de evento impulsado programas - entonces XSLT será muy familiar, paisaje extraterrestre, de hecho.Al menos al principio.El crecimiento de un poco de experiencia y, a continuación, volver a XSLT cuando las expresiones XPath y gestión de eventos son realmente cómodas para usted pagará con creces.

Para la mayor parte, lo que hace XSLT no un 100% funcional del lenguaje de programación es su incapacidad para tratar funciona como una primera clase de tipo de datos.

Puede haber algunas otras-pero esa es la respuesta obvia.

Buena suerte!

Saxon-SA ha introducido algunas funciones de extensión que hacer XSLT funcional.Puede utilizar saxon:function() para crear un valor de la función (en realidad, un {http://net.sf.saxon/java-type}net.sf.saxon.expr.UserFunctionCall valor) que, a continuación, llamar con saxon:call().

Saxon-B tiene una funcionalidad similar con la vinculación de saxon:expression() y saxon:eval().La diferencia es que saxon:expression() toma cualquier expresión XPath, y saxon:eval() evalúa, mientras que saxon:function() toma el nombre de una función que saxon:call() las llamadas.

Que no es realmente un argumento, ya que sólo se pueden declarar variables, no cambian sus valores después de la declaración.En ese sentido es declarativa no imprescindible estilo, como se indica en el Señor Novatchev del artículo.

Lenguajes de programación funcional como Esquema o Erlang permiten declarar las variables como bien, y en Haskell también puede hacer que:

-- la función de "prueba" toma la variable x y se agrega en cada elemento de la lista xs

test :: [Int] -> [Int]
test xs = map (+ x) xs
where x = 2
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top