1

我赋予的功能是否以foldl中缀方式应用?

例子

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

= 0-1-2-3 
= -6

所以更一般地说:

foldl f x [a,b,c]

应用为:

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

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

4

1 回答 1

5

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

在 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使用中缀表示法来帮助解释函数的行为,因为它是一种有用的表示,有助于理解这一点。但请注意不要将符号(又名语法)与外延(又名含义)混淆。许多程序可以在符号上不同但在符号上等价。

于 2018-07-01T06:25:40.207 回答