【问题标题】:What's the difference between type1 -> type2 -> type3 and type1 -> (type2 -> type3)?type1 -> type2 -> type3 和 type1 -> (type2 -> type3) 有什么区别?
【发布时间】:2021-03-25 05:24:50
【问题描述】:

为什么

let f1 a b = a + b

let f2 a = fun b -> a + b 

两者都产生a:int -> b:int -> int类型的值,
但是

let f3 a =
   let f = 
     fun b -> a + b 
   f

let f4 a =
   let f b = a + b
   f

两者都产生 a:int -> (int -> int) 类型的值?
int -> int 周围的大括号是什么意思? 是否存在这两种类型在程序中做不同事情的情况?

【问题讨论】:

    标签: functional-programming f#


    【解决方案1】:

    AFAIK 没有区别,type1 -> type2 -> type3 只是 type1 -> (type2 -> type3) 的语法糖

    https://fsharpforfunandprofit.com/posts/currying/

    答案很简单:一个有多个参数的函数被重写为一系列新函数,每个函数只有一个参数。这是由编译器自动为您完成的。

    【讨论】:

      【解决方案2】:

      就像 mclark1129 所说,没有区别;您可以将其读取为两个参数的函数或单个参数的两个函数——这里的括号表示一个函数,因为如果您只提供第一个参数 (type1),该函数将返回一个接受 type2 的函数并返回一个type3

      柯里化和部分应用是函数式编程的基础,并支持诸如代数数据结构之类的东西,其中将多元函数柯里化/部分应用到单参数函数是常态。

      【讨论】:

        猜你喜欢
        • 2012-11-08
        • 2015-05-28
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多