【问题标题】:Haskell: foldl Function applied as infix Function?Haskell:foldl 函数应用为中缀函数?
【发布时间】:2018-07-01 06:14:50
【问题描述】:

我给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 fold infix-operator foldleft


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多