【问题标题】:Number of arguments of composition in haskellhaskell中组合的参数数量
【发布时间】:2021-01-29 00:55:33
【问题描述】:

最近我一直在学习haskell中的组合,现在对这个例子有点困惑。

(const . min) 3 0 4

结果我得到 3,所以在内部它必须像这样计算:

const (min 3) 0 4

但我想既然 min 有两个参数,它应该是这样的:

const (min 3 0) 4

因此,显然组合只采用了这个参数,在本例中为 3,而不是像我预期的那样使用 min 的所有参数。这是否意味着组合在默认情况下只接受一个参数,或者我在这里没有得到什么?

【问题讨论】:

  • 所有 Haskell 函数都有一个参数。例如。 min 3 0 将 (1-arg) 函数 min 应用于参数 3。结果是一个 (1-arg) 函数,然后将其应用于0。结果是数字0。我们当然喜欢将min 视为一个 2-arg 函数,但从技术上讲,Haskell 中没有这样的东西。连贯地,组合由两个(1-arg)函数组成。要组合“2-arg”函数(即 1-arg 返回 1-arg 函数),需要一些其他运算符,或者简单地使用 lambda。

标签: haskell composition


【解决方案1】:

您可以通过手动评估初始表达式来回答您的问题。

(const . min) 3 0 4
⇒ (\x -> const (min x)) 3 0 4    * defn of (.)
⇒ (const (min 3)) 0 4            * function application
⇒ ((\x y -> x) (min 3)) 0 4      * defn of const
⇒ (\y -> min 3) 0 4              * function application
⇒ (min 3) 4                      * function application
⇒ 3                              * because 3 is less than 4

值得注意的是函数应用是左关联的,所以f x y(f x) y意思一样。

另外值得注意的是\x y -> z\x -> \y -> z的含义相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多