我目前正在阅读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];;
编译得很好。有什么想法吗?
答案 0 :(得分:7)
我想你是来自Haskell,期望它以这种方式工作:)
不幸的是,F#没有语法糖,你可以通过在表达式之前或之后用括号括起来来部分应用运算符。在您的代码中,+1
被视为单个数字标记,这就是为什么它抱怨它不是函数。
然而,F#具有的语法是您可以单独为运算符括起来的语法。这导致了@ Lee的解决方案。但请注意这种语法:(+) 1
等同于Haskell的(1+)
,而不是(+1)
。显然,添加无关紧要,但对于减法这样的非对称操作,可能会产生误导。
答案 1 :(得分:5)
您需要在+
:
List.map ((+)1) [1..10]