嘿,有没有理由F#需要一个不同的“赋值”运算符来进行函数定义而不是lambda,或者它是一个随机决策?例如“let inc x = x + 1”vs“fun x - > x + 1”
答案 0 :(得分:6)
大量的F#语法来自OCaml - 许多OCaml程序将在F#中编译和运行,没有任何变化。
良好的起始链接:
http://msdn.microsoft.com/en-us/fsharp/default.aspx
http://en.wikibooks.org/wiki/F_Sharp_Programming
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!887.entry?_c=BlogPart
答案 1 :(得分:4)
除了Brian的链接,我还想将链接传递给我自己的博客系列Why I Love F#,其中包含一些基础知识。
关于你的第二个问题,“let inc x = x + 1”vs“fun x - > x + 1”是表达函数的两种方式,但只有第一个使用赋值运算符。事实上,
let inc x = x + 1
相当于:
let inc = (fun x -> x + 1)
第一个是第二个的简写,但第二个可能说明F#中的所有函数是如何绑定到名称的lambdas。
答案 2 :(得分:3)
采用F#函数,例如:
就在那里你有一个比C#更容易的功能系统,其中void创建了一个特殊情况,并且没有对所有函数进行泛化。
至于你的具体问题,“let f x = x”与“let f = fun x - > x”,这可能是ML的遗传特征。 (我没有看到任何特殊的原因,为什么它不能“让f =有趣的x = x”,除了它可能更令人困惑并且可能使语法更复杂?(我个人更喜欢“让f = \ xx“。))无论如何,虽然在大多数情况下它们是等价的,但有时你必须定义一个句法函数而不是一个函数值。
不幸的是,.NET互操作可能会使事情变得更复杂,尽管可能不会比其他.NET语言更多或更多。答案 3 :(得分:2)
您提到的两个表达式中只有一个使用赋值运算符。
这定义了一个绑定到标识符“inc”的函数,它接受一个int类型的参数并返回参数+1。
let inc x = x + 1;
另一方面,这是表示λ的表达式。它必然没有标识符不能单独存在。它必须是更大表达的一部分。
fun x -> x + 1
答案 4 :(得分:2)
答案 5 :(得分:1)
http://www.samskivert.com/code/fsharp/fsharp-cheat-sheet.pdf
这是一本非常全面的备忘单,通过学习F#帮助我解决了很多问题
答案 6 :(得分:0)
请注意,您可以直接在表达式中应用lambda。
let i = (fun x -> x + 1)0 //i equal 1