Types F#let add1 x=x和#x2B之间的差值;让add2 x=x+;1.

Types F#let add1 x=x和#x2B之间的差值;让add2 x=x+;1.,types,f#,Types,F#,让add1 x=x+1和让add2 x=x+1之间有什么区别。空间的意外移除改变了功能类型,从 val add1:x:int->int 到 val add2:x:(int->'a)->'a 据我所知,第一个type语句说add1将int映射到int。但是第二个是什么意思呢 嗯,'a表示泛型类型,但是函数'add2'如何返回泛型类型 谢谢你的帮助。这是F#语法的一个怪癖:紧跟数字文字的加号或减号分别被视为正数或负数,而不是紧跟数字的运算符 > 42 it : int = 42 > +

让add1 x=x+1
让add2 x=x+1
之间有什么区别。空间的意外移除改变了功能类型,从
val add1:x:int->int

val add2:x:(int->'a)->'a

据我所知,第一个type语句说
add1
int
映射到
int
。但是第二个是什么意思呢

嗯,
'a
表示泛型类型,但是函数
'add2'
如何返回泛型类型

谢谢你的帮助。

这是F#语法的一个怪癖:紧跟数字文字的加号或减号分别被视为正数或负数,而不是紧跟数字的运算符

> 42
it : int = 42

> +42
it : int = 42

> -42
it : int = -42
因此,您的第二个示例
let add2 x=x+1
相当于
let add2 x=x1
。表达式
x1
表示
x
是一个函数,它被应用于参数
1
,这正是您的类型告诉您的:

add2 : x:(int -> 'a) -> 'a

这意味着
add2
接受一个名为
x
的函数,该函数接受一个
int
并返回一些
'a
,而
add2
本身也返回相同的
'a

不,它没有。你从哪里得到这个想法的?因为,正如你在
让add2=x+1
中所说,
x
被认为是一个应用于参数1的函数。这里从未定义过
x
。如果我错误地解释了你的陈述,一定要让我知道。那只是一个打字错误
let add2=
而不是
let add2 x=
。更正。太好了,我想我现在明白了,
add2
已经成为一个高阶函数,它以
int->'a
类型的函数作为参数。x只是参数的占位符。尝试使用
let add x=x+1;;测试该概念;;设func(a:int)=a+5;;添加func并得到6作为答案。请务必让我知道这是否正确。