Haskell 中的运算符
Operators in Haskell
我写了下面的函数
foldList :: (Double -> Double -> Double) -> [Double] -> Double
foldList op (x:t)
| t == [] = x
| otherwise = (op) x (foldList op t)
而且效果非常好。但是当我将最后一行更改为
| otherwise = x op (foldList op t)
它不再编译了。我对 Haskell 还是比较陌生,但我认为在处理运算符时
a op b
相当于
(op) a b
我是否必须将 op
视为普通函数?如果是这样,在什么情况下它被视为运营商,为什么不在这里?
运算符是带有符号名称的函数。默认情况下它们是中缀的,您可以像使用其他函数一样使用它们,只需将它们括在括号中即可。
a + b (+) a b
具有标识符名称的函数,例如您的 op
,可以通过用 反引号 .
包装它们来用作中缀
op a b a `op` b
我写了下面的函数
foldList :: (Double -> Double -> Double) -> [Double] -> Double
foldList op (x:t)
| t == [] = x
| otherwise = (op) x (foldList op t)
而且效果非常好。但是当我将最后一行更改为
| otherwise = x op (foldList op t)
它不再编译了。我对 Haskell 还是比较陌生,但我认为在处理运算符时
a op b
相当于
(op) a b
我是否必须将 op
视为普通函数?如果是这样,在什么情况下它被视为运营商,为什么不在这里?
运算符是带有符号名称的函数。默认情况下它们是中缀的,您可以像使用其他函数一样使用它们,只需将它们括在括号中即可。
a + b (+) a b
具有标识符名称的函数,例如您的 op
,可以通过用 反引号 .
op a b a `op` b