【问题标题】:Haskell/lambda calculus types exampleHaskell/lambda 演算类型示例
【发布时间】:2013-02-25 04:38:25
【问题描述】:

假设 Haskell 或 lambda 演算呈现以下函数类型:

A -> B -> C

(A -> B) -> C

这两者有何不同?

【问题讨论】:

  • 第一个相当于A -> (B -> C)。这是你的问题吗?

标签: haskell lambda-calculus


【解决方案1】:

第一个是从A到a的函数(从BC的函数)。第二个是从(从AB 的函数)到C 的函数。第一个“接受两个论点”,第二个“接受一个论点”。第一个是普通函数,第二个是“高阶函数”。

【讨论】:

  • 两者都是高阶函数。
  • 从技术上讲,它们也都采用一个参数。也许我应该吓唬引用“高阶函数”。
  • 是的,很公平:)。人们用“高阶函数”来表示不同情况下的不同事物。
  • 我倾向于将“currying”和“HOF”视为非常不同的组件,它们可以很好地协同工作,而不是基于 lambda 演算的语言的自然结果。
【解决方案2】:

以下是您的类型的两个示例函数,可帮助您了解它们的不同之处:

valatzero :: Num a => (a -> t) -> t
valatzero f = f 0

plus :: Num a => a -> a -> a
plus x y = x + y

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2013-09-26
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多