Functional programming 什么';s类型1与>;类型2->;类型3和类型1->;(类型2->;类型3)?

Functional programming 什么';s类型1与>;类型2->;类型3和类型1->;(类型2->;类型3)?,functional-programming,f#,Functional Programming,F#,为什么 及 两者都生成类型为a:int->b:int->int的值, 但是 及 两者都生成类型为a:int->(int->int)的值 int->int周围的大括号是什么意思? 这两种类型在一个程序中做的事情是不同的吗?好吧,没有区别,type1->type2->type3只是type1->(type2->type3)的语法糖 答案很简单:一个具有多个参数的函数被重写为一系列新函数,每个函数只有一个参数。这是由编译器为您自动完成的 就像迈凯轮1129所说,没有区别;您可以将其理解为两个参数的函

为什么

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

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

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

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


就像迈凯轮1129所说,没有区别;您可以将其理解为两个参数的函数或一个参数的两个函数–这里的括号表示函数,因为如果您只提供第一个参数(
type1
),该函数将返回一个采用
type2
并返回
type3
的函数

curry和partial application是函数式编程的基础,也是代数数据结构的基础,在代数数据结构中,curry/partial application multi-arity函数下至单参数函数是规范

let f1 a b = a + b
let f2 a = fun b -> a + b 
let f3 a =
   let f = 
     fun b -> a + b 
   f
let f4 a =
   let f b = a + b
   f