Haskell 函数组合运算符和“空间运算符”优先级

Joh*_*nny 15 haskell

首先,我对 Haskell 还很陌生,目前我只是在准备考试。我有这样的表达:
reverse . take 3 [1 .. 10]我得到的是一个错误。这是因为空格运算符(10)比.运算符(9)具有更大的优先级,并且上面的表达式相当于reverse . (take 3 [1..10])which is reverse . ([1, 2, 3])which是reverse和list之间的组合,这没有任何意义,对吧?我试图确保我做对了,我在互联网上没有找到类似的东西。

Jos*_*ica 16

你基本上是正确的。前缀函数应用程序(您称为“空间运算符”)比任何中缀运算符绑定得更紧密。为了完整起见,修复错误的方法是执行(reverse . take 3) [1 .. 10]reverse . take 3 $ [1 .. 10]替代。

  • (或“反向$取3 [1..10]”) (5认同)
  • @amalloy是的,但是来吧,如果你是认真的™的话,只有``($ reverse) (flip (.) . take $ 3) `id` [1 .. 10]`` 才可以...... (3认同)
  • (或“反向(取 3 [1..10])”) (2认同)