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(又名含义)混淆。许多程序在符号上可以不同,但在符号上是等价的。
我给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(又名含义)混淆。许多程序在符号上可以不同,但在符号上是等价的。