我赋予的功能是否以foldl
中缀方式应用?
例子
foldl (-) 0 [1,2,3]
= 0-1-2-3
= -6
所以更一般地说:
foldl f x [a,b,c]
应用为:
(((x `f` a) `f` b) `f` c)
我知道它是递归的,但我可以这样想吗?
我赋予的功能是否以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
。换句话说,中缀运算符的应用仍然只是普通的旧函数应用,其中函数应用于两个参数。
如果它可以帮助您foldl
通过表达式 like((a `f` b) `f` c) `f` d
而不是like 进行可视化f (f (f a b) c) d
,那肯定在您的权利之内,因为这两个表达式是等价的。实际上,文档foldl
使用中缀表示法来帮助解释函数的行为,因为它是一种有用的表示,有助于理解这一点。但请注意不要将符号(又名语法)与外延(又名含义)混淆。许多程序可以在符号上不同但在符号上等价。