代码之家  ›  专栏  ›  技术社区  ›  Eric Weilnau

XSLT是函数式编程语言吗?

  •  22
  • Eric Weilnau  · 技术社区  · 18 年前

    6 回复  |  直到 15 年前
        1
  •  30
  •   Brian R. Bondy    18 年前

    尽管XSLT基于函数式编程思想,但它不是一种完整的函数式编程语言,它缺乏将函数视为第一类数据类型的能力。它具有诸如延迟求值之类的元素,以减少不必要的求值以及显式循环的缺失。

    不过,就像函数式语言一样,我认为它可以很好地与跨多个处理器的自动安全多线程并行。

    Wikipedia on XSLT :

    作为一种语言,XSLT受到以下因素的影响 函数式语言,以及 像斯诺波尔和奥克。最直接的 对SGML执行相同的功能 也可以被视为模板 加工机

    这里有一个关于使用的好网站 XSLT as a functional language 在FXSL的帮助下。FXSL是一个实现对高阶函数支持的库。

    因为FXSL,我认为XSLT本身不需要完全功能化。也许FXSL将来会作为W3C标准加入,但我没有证据证明这一点。

        2
  •  7
  •   joegy joegy    17 年前

    http://fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html .

    XSLT中的函数是一流的公民,毕竟有一些解决方法:-)

        3
  •  6
  •   JohnnySoftware    11 年前

    这就是我编程时的感觉。

    XSLT允许您设置一个变量。函数式编程不允许函数产生副作用,这是一个大问题。

    这是一个非常非常不同的编程模型,与使用DOM API时使用的编程模型非常不同。DOM根本不分离输入和输出。你得到了一个数据结构,你可以毫不犹豫,不受限制,也不后悔地把它弄坏。

    只要说一句,如果你喜欢FP及其背后的原则,你可能会觉得在里面工作很舒服。就像事件驱动编程(以及XML本身)的经验一样,它也会让您感到舒适。

    如果您唯一的经验是使用自上而下、非事件驱动的程序,那么XSLT将是一个非常陌生、陌生的领域。至少一开始是这样。积累一点经验,然后在XPath表达式和事件处理对您来说非常舒服的时候再回到XSLT,这会给您带来丰厚的回报。

        4
  •  5
  •   Ian P    18 年前

    祝你好运

        5
  •  4
  •   Richard    18 年前

    Saxon SA引入了一些扩展函数,使XSLT功能化。你可以用 saxon:function() 创建函数值(实际上是 {http://net.sf.saxon/java-type}net.sf.saxon.expr.UserFunctionCall saxon:call() .

    Saxon-B的功能与 saxon:expression() saxon:eval() . 区别在于 萨克森:表达式() 接受任何XPath表达式,并且 评估它,而 saxon:function() 萨克森:call() 电话。

        6
  •  1
  •   Alex Gordon    8 年前

    这实际上不是一个参数,因为您只能声明变量,而不能在声明后更改它们的值。从这个意义上说,它是陈述式而非命令式风格,正如诺瓦切夫先生的文章所述。

    Scheme或Erlang等函数式编程语言也允许您声明变量,在Haskell中您也可以这样做:

    --函数“test”接受变量x并将其添加到列表xs的每个元素上

    test :: [Int] -> [Int]
    test xs = map (+ x) xs
    where x = 2