F#显然包含了许多语法糖,当我试图学习它时--没有书的帮助--我被各种各样的语法弄得不知所措。有没有一种更简单的“核心”语言隐藏在所有这些语法糖的背后?是否有语法糖的小抄列表,以及它们如何映射到核心语言?
还有,有没有什么原因F#要求函数定义使用不同于lambda的“赋值”运算符,或者这是一个随机的决定?例如"let inc x= x+1“vs "fun x -> x+1”
发布于 2009-03-05 22:34:07
大量的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
发布于 2009-03-14 15:01:10
除了Brian的链接之外,我还想把链接传递给我自己的博客系列Why I Love F#,它涵盖了一些基础知识。
关于你的第二个问题,"let inc x= x+1“和"fun x -> x+1”是表达函数的两种方式,但只有第一种方式使用赋值操作符。事实上,
let inc x = x + 1等同于:
let inc = (fun x -> x + 1)第一个是第二个的简写,但第二个可能说明F#中的所有函数实际上都是lambda绑定到名称的。
发布于 2009-03-06 16:37:54
除了.NET互操作之外,F#似乎比C#要简单得多。(并不是特别针对它,但因为它是另一种流行的.NET语言……)
以F#函数为例:
没有什么神奇的“expression”类型---
所有函数都是第一类类型unary
在这里,你有一个函数系统,它比,比方说,C#,创建一个特例要容易得多,而且不可能对所有的函数都进行泛化。
至于你的具体问题,"let f x= x“与"let f= fun x -> x”相比,这可能是ML的遗传特征。(我看不出为什么它不能是"let f= fun = x",除了它可能会更令人困惑,而且可能会使语法更复杂?(就我个人而言,我更喜欢"let f=\x.x“。)无论如何,尽管在大多数情况下它们是等价的,但有时您必须定义一个语法函数,而不是函数值。
不幸的是,.NET互操作可能会使事情变得更复杂,尽管可能不会比其他.NET语言更多或更多。
https://stackoverflow.com/questions/616934
复制相似问题