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作为答案。请务必让我知道这是否正确。