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

时间:2013-12-21 14:51:44

标签: f#

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

但如果我尝试

List.map (+1) [1 .. 10];;

然后我得到error FS0001: This expression was expected to have type 'a -> 'b

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

2 个答案:

答案 0 :(得分:7)

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

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

然而,F#具有的语法是您可以单独为运算符括起来的语法。这导致了@ Lee的解决方案。但请注意这种语法:(+) 1等同于Haskell的(1+),而不是(+1)。显然,添加无关紧要,但对于减法这样的非对称操作,可能会产生误导。

答案 1 :(得分:5)

您需要在+

周围添加括号
List.map ((+)1) [1..10]