Pergunta

Várias perguntas sobre linguagens de programação funcional ter me fez pensar sobre se XSLT é uma linguagem de programação funcional. Se não, quais recursos estão faltando? Tem XSLT 2.0 encurtado ou diminuiu a diferença?

Foi útil?

Solução

XSLT é declarativa ao invés de stateful.

Embora XSLT é baseada em ideias de programação funcional, não é uma linguagem de programação funcional completo, falta-lhe a capacidade de funções tratar como um primeiro tipo de dados de classe. Tem elementos como a avaliação lenta para reduzir a avaliação desnecessários e também a ausência de laços explícitos.

Como uma linguagem funcional, porém, eu acho que ele pode ser muito bem paralelizado com multi threading seguro automático em vários processadores.

A partir Wikipedia em XSLT :

Como uma linguagem, XSLT é influenciada por linguagens funcionais, e por linguagens padrão de correspondência baseado em texto como SNOBOL e awk. Seu mais directo predecessor foi DSSSL, uma linguagem que realizada a mesma função para SGML executado pela XSLT para XML. XSLT lata também ser considerado como um modelo processador.

Aqui é um ótimo site sobre o uso XSLT como um linguagem funcional com a ajuda de FXSL. FXSL é uma biblioteca que implementa o suporte a funções de ordem superior.

Por causa de FXSL eu não acho que XSLT tem uma necessidade de ser totalmente funcional em si. Talvez FXSL será incluído como um padrão W3C no futuro, mas eu não tenho nenhuma prova disso.

Outras dicas

Estou certo de que vocês têm encontrado neste link até agora :-) http: //fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html .

funciona bem em XSLT são de primeira classe-cidadãos com alguns arounds trabalho depois de tudo: -)

Isso é uma espécie de como se sente quando estou programando-lo.

XSLT é inteiramente baseada na definição de funções e aplicá-las a eventos selecionados que descem a corrente de entrada.

XSLT permite que você defina uma variável. A programação funcional não permitem que funções têm efeitos colaterais - e isso é um Biggie

.

Ainda assim, escrevendo em XSLT, um tem a mesma sensação" como trabalhar de forma FP Você está trabalhando com a entrada -. Você não está mudando isso -. Para criar uma saída

Este é um modelo de programação muito, muito diferente do que é utilizado quando se trabalha com a API DOM. O DOM não separar a entrada e saída de todo. Está entregue uma estrutura de dados - e você mangle-lo como você vê o ajuste -. Sem hesitação, restrição ou remorso

Basta dizer que se você gosta de FP e os princípios por trás dele, você provavelmente vai se sentir confortável trabalhando nele. Assim como experiência com orientado a eventos de programação - eo próprio XML -. Vai fazer você se sentir confortável com ele assim

Se a sua única experiência é com top-down, programas dirigidos non evento - então XSLT será muito estranha paisagem, alienígena, de fato. Pelo menos a primeira. Crescer um pouco de experiência e depois voltar para XSLT quando expressões XPath e manipulação de eventos são realmente confortáveis ??para que você vai pagar generosamente.

Para a maior parte, o que faz XSLT não é uma linguagem de programação funcional de 100% é a sua incapacidade de funções tratar como um tipo de dados de primeira classe.

Pode haver alguns outros -. Mas essa é a resposta óbvia

Boa sorte!

Saxon-SA introduziu algumas funções de extensão que fazem XSLT funcional. Você pode usar saxon:function() para criar um valor de função (na verdade um valor {http://net.sf.saxon/java-type}net.sf.saxon.expr.UserFunctionCall) que você, em seguida, chamar com saxon:call().

Saxon-B tem uma funcionalidade semelhante com o emparelhamento de saxon:expression() e saxon:eval(). A diferença é que saxon:expression() toma qualquer expressão XPath, e saxon:eval() avalia que, enquanto saxon:function() leva o nome de uma função que chamadas saxon:call().

Isso não é realmente um argumento, já que você só pode declarar variáveis, não mudar seus valores após declaração. Nesse sentido, é declarativa estilo não imperativo, como indicado no artigo do Sr. Novatchev.

linguagens de programação funcionais como Esquema ou Erlang permitir-lhe declarar variáveis, bem como, e em Haskell você também pode fazer isso:

- função 'teste' leva variáveis ??x e adiciona-lo em cada elemento da lista xs

test :: [Int] -> [Int]
test xs = map (+ x) xs
where x = 2
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top