F# 开始上路

最近看到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"
红色字体是输出的入口函数

posted @ 2009-09-01 00:24  moonz-wu  阅读(470)  评论(0编辑  收藏  举报