我写了以下函数
foldList :: (Double -> Double -> Double) -> [Double] -> Double
foldList op (x:t)
| t == [] = x
| otherwise = (op) x (foldList op t)
Run Code Online (Sandbox Code Playgroud)
它工作得非常好.但当我改变最后一行时
| otherwise = x op (foldList op t)
Run Code Online (Sandbox Code Playgroud)
它不再编译了.我仍然是Haskell的新手,但我想与操作员打交道
a op b
Run Code Online (Sandbox Code Playgroud)
相当于
(op) a b
Run Code Online (Sandbox Code Playgroud)
我是否必须将其op视为正常功能?如果是这样,在什么情况下它被视为运营商,为什么不在这里呢?
运算符是具有符号名称的函数.默认情况下,它们是中缀,您可以将它们包含在括号中,就像其他函数一样使用它们.
a + b (+) a b
Run Code Online (Sandbox Code Playgroud)
具有标识符名称的函数(如您的op)可以通过用反引号包装它们作为中缀.
op a b a `op` b
Run Code Online (Sandbox Code Playgroud)
另请参见https://wiki.haskell.org/Infix_operator