List.map的部分功能应用程序

Mai*_*ein 5 f#

我目前正在阅读F#3.0编程,我读到F#支持部分功能应用.

但是,如果我尝试

List.map (+1) [1 .. 10];;
Run Code Online (Sandbox Code Playgroud)

然后我明白了 error FS0001: This expression was expected to have type 'a -> 'b

List.map (fun x -> x + 1) [1 .. 10];;编译得很好.有什么想法吗?

Tar*_*mil 7

我想你是来自Haskell,期望它以这种方式工作:)

不幸的是,F#没有语法糖,你可以通过在表达式之前或之后用括号括起来来部分应用运算符.在您的代码中,+1被认为是单个数字标记,这就是为什么它抱怨它不是一个函数.

然而,F#具有的语法是您可以单独为运算符括起来的语法.这导致了@ Lee的解决方案.但要注意这个语法:(+) 1相当于Haskell (1+),而不是(+1).显然,对于添加并不重要,但对于诸如减法之类的非对称操作,它可能会产生误导.


Lee*_*Lee 5

你需要在括号周围放括号+:

List.map ((+)1) [1..10]
Run Code Online (Sandbox Code Playgroud)