Haskell: foldl 函数应用为中缀函数?

Haskell: foldl Function applied as infix Function?

我给foldl的函数是中缀应用的吗?

例子

foldl (-) 0 [1,2,3]

= 0-1-2-3 
= -6

更一般地说:

foldl f x [a,b,c]

应用为:

(((x `f` a) `f`  b) `f` c)

我知道它是递归的,但我可以这样想吗?

中缀函数应用和前缀函数应用之间的唯一区别是语法,所以你的问题没有多大意义。除了引用特定表达式的语法之外,“以中缀方式”应用函数没有任何意义。

在Haskell中,当你写x + y时,恰好等同于写(+) x y。同样,x `op` y 正好等同于 op x y。换句话说,中缀运算符的应用仍然只是普通的旧函数应用,其中函数应用于两个参数。

如果它可以帮助您通过像 ((a `f` b) `f` c) `f` d 而不是像 f (f (f a b) c) d 这样的表达式来形象化 foldl,那当然是您的权利,因为这两个表达式是等价的。事实上,foldl 的文档使用中缀符号来帮助解释函数的行为,因为它是一种有助于理解要点的有用表示。但要注意不要将 notation(又名语法)与 denotation(又名含义)混淆。许多程序在符号上可以不同,但​​在符号上是等价的。