最近看到MS已经发布了VS2010 beta版,忍不住下载下来体验一番。的确界面比前几版改进
了不少,不仅仅是界面,内容也增加了不少。最引起我注意的是里面有个叫F#的家伙。什么
语言?以前听过D语言,没想到现在都到F了(哈哈,好傻的推论)。随后上网搜了一顿,发
现这个叫F#好像相当的不错,特别强调这是一种函数式编程语言。我对什么是函数式编程不
是很了解,所以也想学习学习。终于,功夫不负有心人,找到了一本Expert F#的电子版。好
像这本书就是F#的设计者写的,我想应该不错。
今天尝试了书里的第一个例子程序,没想折腾了我半天。程序就是我上一篇的博客。强调一下
我没有使用VS2010来F#进行开发,因为VS2010对F#的支持显然还不很完善,连
FSharp.PowerPack都找不到。所以还是用VS2008和F#安装包1.9.2。
今天的学习到的要点是对F#程序语法的理解
let wordCount text =
let words = String.split [' '] text
let wordSet = Set.of_list words
let nWords = words.Length
let nDups = words.Length - wordSet.Count
(nWords, nDups)
这个是书里的程序,初看起来比较怪异,毕竟和C/C++/C#的程序区别很明显。let是F#程序
最重要的关键字,它用来声明函数与值。其后需要跟上一个函数名或值,如wordCount;如
果是函数名则需要在其后跟上参数,如text;程序的最后(nWords, nDups)表示该函数有
两个整型的返回值。
如果你在F#的交换环境中,输入这段程序,环境会提示你如下:
val wordCount : string -> int * int
这里的提示很清楚的告诉我们,这wordCount函数输入为字符串,输出为两整型。
由于F#没有类似于C/C++的主函数,所以如果我们想在VS环境中调试这个程序,我们需要键入:
#light
/// Analyze a string for duplicate words
let wordCount text =
let words = String.split [' '] text
let wordSet = Set.of_list words
let nWords = words.Length
let nDups = words.Length - wordSet.Count
(nWords, nDups)
let showWordCount text =
let nWords,nDups = wordCount text
printfn "--> %d words in the text" nWords
printfn "--> %d duplicate words" nDups
let print = showWordCount "Hello world Hello"
红色字体是输出的入口函数