精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

F#入門:基本語法,模式匹配及List

開發(fā) 后端
F#是隨著VS2010 Beta版一起正式推出的另一個(gè)基于.NET平臺(tái)的語言,以函數(shù)式語言著稱。這個(gè)F#入門文章介紹了F#的基本語法,模式匹配及List基本類型。

F#隨著VSTS 2010 Beta1 發(fā)布也有一段時(shí)間了,園子里應(yīng)該也有不少人對(duì)它感興趣吧。下面的例子是我在學(xué)F# 基本語法時(shí)寫的一個(gè)簡(jiǎn)單Sieve of Eratosthenes 實(shí)現(xiàn),通過剖析這一小段代碼,我希望大家能對(duì)F#有個(gè)簡(jiǎn)單認(rèn)識(shí),并能自己寫一些簡(jiǎn)單的小程序。

F#入門代碼

  1. let GetAllPrimesBefore n =   
  2.     let container = Array.create (n+1) 0  
  3.     let rec loop acc = function  
  4.         |[] -> List.rev acc  
  5.         |hd::tl ->   
  6.             if container.[hd] =1 then   
  7.                 loop acc tl  
  8.             else 
  9.                 for j in [hd .. hd .. n] do 
  10.                     container.[j] <- 1  
  11.                 loop (hd::acc) tl      
  12.     loop [] [2 .. n]  
  13.       
  14. let primesBefore120 = GetAllPrimesBefore 120 

廢話少說,直接進(jìn)入正題吧

  1. let GetAllPrimesBefore n = 

第一行,申明函數(shù)GetAllPrimesBefore, 并且該函數(shù)有一個(gè)參數(shù)n, 在這里我沒有指定n的類型,因?yàn)榫幚[器可以通過函數(shù)體對(duì)n的類型進(jìn)去推斷,比如在本例中,n就是int類型,當(dāng)然我們也可以顯示的指定n的類型,比如 let GetAllPrimesBefore (n:int),這樣我們就指定了n為int型 (注意:(n:int)中的括號(hào)不能省略,let GetAllPrimesBefore n : int 的意思是該函數(shù)返回的值的int型)。說完了參數(shù),再說下返回值,同樣,編繹器會(huì)根據(jù)函數(shù)體上下文對(duì)返回值類型進(jìn)去推斷,所以我們不需要申明返回類型。

  1. let container = Array.create (n+1) 0 

第二行,首先請(qǐng)注意該行與第一行相對(duì)有一個(gè)縮進(jìn)({TAB}),F#和Python一樣,也是通過{TAB}縮進(jìn)來組織代碼結(jié)構(gòu)的。這一行我們定義了一個(gè)變量container,它的類型是Array,大小為 n+1, 并且值全部初使化為0

  1. let rec loop acc = function  
  2.         |[] -> List.rev acc  
  3.         |hd::tl ->   
  4.             if container.[hd] =1 then   
  5.                 loop acc tl  
  6.             else 
  7.                 for j in [hd .. hd .. n] do 
  8.                     container.[j] <- 1  
  9.                 loop (hd::acc) tl  

接下來就是這個(gè)函數(shù)的主要部分了(原程序中的3-11行),首先我們定義了一個(gè)遞歸函數(shù)(我們發(fā)現(xiàn)定義遞歸函數(shù)需要加rec關(guān)鍵字)。它接受兩個(gè)參數(shù),acc和一個(gè)List,有朋友可能要問了,這里明明我只看到一個(gè)參數(shù)acc,你說的那個(gè)List在哪呢?可能有細(xì)心的朋友也發(fā)現(xiàn)了這里的函數(shù)定義不光前面有rec,在等號(hào)后面還加了個(gè)function,那么function是做什么用的呢?

  1. let rec loop acc = function 

F#入門:模式匹配

這里我需要首先講一下Pattern Matching(模式匹配), Pattern Matching有些類似于C#中的switch語句(當(dāng)然它要比C#中的switch強(qiáng)大許多,但這不是本文的目地,所以略去不表),可以根據(jù)expr的值去執(zhí)行某一具體分支,它的基本語法也很簡(jiǎn)單,我們還是結(jié)合一個(gè)具體實(shí)例來看一下(例子比較簡(jiǎn)單,只是為了說明問題)。 這個(gè)例子大家很容易看懂吧,我就不詳細(xì)解釋了,只是說明一點(diǎn),'_'用來匹配所有別的情況。

  1. let ShowGreeting laguageInUse =   
  2.     match laguageInUse with  
  3.     | "C#" -> printfn "Hello, C# developer!" 
  4.     | "F#" -> printfn "Hello, F# developer!" 
  5.     |_ -> printfn "Hello, other developers!" 

因?yàn)镻attern Matching在F#中的使用范圍實(shí)在太廣了,所以就引入了一種簡(jiǎn)化版,這就是上面大家看到的等號(hào)后面的function的作用,我們可以把上面的例子簡(jiǎn)化成

  1. let ShowGreeting  = function      
  2.     | "C#" -> printfn "Hello, C# developer!" 
  3.     | "F#" -> printfn "Hello, F# developer!" 
  4.     |_ -> printfn "Hello, other developers!" 

怎么樣?既少了給參數(shù)起名的煩惱,也少敲不少字吧,嘿嘿。

F#入門:List基本類型

接下來我再簡(jiǎn)單介紹下F#中非常重要的一個(gè)基本類型List, 其基本表示形式為 [ item1;item2; .. ;itemn]

F#中List是immutable類型,我們只能訪問里面的值,不能改動(dòng)里面的值,任何改動(dòng)List的需求只能通過構(gòu)建新的List來實(shí)現(xiàn)。稍一思考,大家就會(huì)很快發(fā)現(xiàn)要實(shí)現(xiàn)一個(gè)高效的immutable list, 那最簡(jiǎn)單的就是對(duì)其頭結(jié)點(diǎn)進(jìn)去操作了(插入和刪除都可以達(dá)到O(1),當(dāng)然插入和刪除會(huì)構(gòu)建一個(gè)新的List,原List不會(huì)改變),F(xiàn)#中的List也是基于這種形式,所有的List都可以看成是Head+Tail(除了Head外的所有結(jié)點(diǎn)),F#提供了相應(yīng)的庫(kù)函數(shù)List.hd, List.tl,并且提供了:: (cons operator)來幫助我們方便的構(gòu)建一個(gè)List,比如1::2::[]就表示List [1;2] (注意1和2之間我用的是;不是, 如果寫成[1,2],那個(gè)表示該List只有一個(gè)元素 (1,2),至于(1,2)是什么類型,為了使文章盡量緊湊,我們今天就不講了)

有了上面這些知識(shí),再看本文一開始的函數(shù)就簡(jiǎn)單多了

  1. let rec loop acc = function  
  2.        |[] -> List.rev acc  
  3.        |hd::tl ->   
  4.            if container.[hd] =1 then   
  5.                loop acc tl  
  6.            else 
  7.                for j in [hd .. hd .. n] do 
  8.                    container.[j] <- 1  
  9.                loop (hd::acc) tl   

首先,該函數(shù)的第二個(gè)參數(shù)是List,

      當(dāng)List為空時(shí),就把a(bǔ)cc反序返回,

      當(dāng)List不為空時(shí),把List分成兩部分(hd::tl),檢查當(dāng)當(dāng)前值n (n的值等于td) 是否己被標(biāo)記

            如果己經(jīng)被標(biāo)記(container.[hd] =1),略過當(dāng)前值,檢查接下來的值 loop acc tl

            如果沒有被標(biāo)記(當(dāng)前值是素?cái)?shù)),用當(dāng)前值和acc構(gòu)建一個(gè)新List (hd::acc),并對(duì)當(dāng)前值的所有倍數(shù)進(jìn)去標(biāo)記(for loop),然后檢查下一個(gè)值  loop (hd::acc) tl

這里有兩點(diǎn)需要特別說明一下:

      1. container是一個(gè)Array類型的參數(shù),Array在F#中是mutable類型的容器,我們可以修改里面的元素,訪問元素用Array.[i], 修改元素用Array.<-[i] = newValue(不要忘記中間的.)

      2.  for loop的基本形式為 for <index> in <range> do, 我們可以使用[start .. end]或[start .. step .. end]來構(gòu)建一個(gè)range,當(dāng)然,這里的range其實(shí)也是一個(gè)List

看完了內(nèi)部函數(shù),我們?cè)俳又驴矗ㄔ绦虻?2行)

  1. loop [] [2 .. n] 

這里就很簡(jiǎn)單了,調(diào)用我們剛剛定義的內(nèi)部函數(shù),(acc為空List [], 第二個(gè)參數(shù)為L(zhǎng)ist [2 .. n]),其返回值(List acc)就是函數(shù)GetAllPrimesBefore的返回值,F(xiàn)#中函數(shù)有返回值時(shí)不需要敲return.

函數(shù)調(diào)用也很簡(jiǎn)單,(不需要在參數(shù)與函數(shù)名之間加括號(hào))

  1. let primesBefore100 = GetAllPrimesBefore 100 

后記

1. F#中函數(shù)體內(nèi)可以定義新的值,變量和函數(shù)。(只在當(dāng)前函數(shù)體內(nèi)可見)。當(dāng)然,這樣做的好處顯而易見,我就不啰嗦了。

2. Recursive function是functional programming中很常用的一種算法實(shí)現(xiàn)方式。functional programming language往往會(huì)針對(duì)尾遞歸進(jìn)行特別的優(yōu)化,F(xiàn)#也不例外,所以我們需要盡可能的把遞歸寫成尾遞歸的形式,這個(gè)有時(shí)就需要像本文一樣借助accumulator來實(shí)現(xiàn)。

本文來自hiber的博客:《結(jié)合實(shí)例學(xué)習(xí)F#(一) --快速入門》。

【編輯推薦】

  1. C# Actor的尷尬與F#美麗外表下的遺憾
  2. 函數(shù)式編程語言F#:基于CLR的另一個(gè)頭等編程語言
  3. Visual Studio 2010爆F(xiàn)#二進(jìn)制兼容性問題
  4. 推薦Visual Studio 2010中F#的一些資源
  5. Visual Studio 2010將正式包含F(xiàn)#
責(zé)任編輯:yangsai 來源: hiber的博客
相關(guān)推薦

2010-01-26 08:25:06

F#語法F#教程

2010-03-26 19:22:08

F#代理

2010-04-07 16:51:59

F#

2010-03-16 09:09:04

F#

2010-03-26 18:31:59

F#異步并行模式

2010-03-26 19:03:19

F#異步并行模式

2010-03-08 09:17:13

F#異步

2009-08-27 09:16:48

F#中DSL原型設(shè)計(jì)

2010-01-07 10:04:18

F#函數(shù)式編程

2010-01-15 08:33:13

F#F#類型推斷F#教程

2011-06-09 09:52:41

F#

2009-08-13 17:39:48

F#數(shù)據(jù)類型Discriminat

2009-08-19 09:42:34

F#并行排序算法

2009-09-10 14:18:59

Functional F#

2012-11-06 10:01:35

ContinuatioF#

2009-12-14 09:04:10

F#運(yùn)算符

2009-12-04 09:16:44

Visual Stud

2009-11-16 09:05:46

CodeTimer

2010-04-06 15:20:56

ASP.NET MVC

2009-12-11 13:59:35

F#
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

极品日韩久久| 久久久噜噜噜久久久| 91热这里只有精品| 亚洲羞羞网站| 91看片淫黄大片一级在线观看| 国产精品久久久久av免费| 欧美卡一卡二卡三| 欧美**vk| 精品美女一区二区| 亚洲 欧美 日韩系列| 麻豆蜜桃在线| 国产精品视频在线看| av在线不卡观看| 欧美三级网站在线观看| 国产精品大片免费观看| 中文字幕欧美视频在线| 午夜视频在线观看国产| 亚洲精品第一| 日韩欧美在线观看视频| 国产午夜精品视频一区二区三区| 欧美偷拍视频| 懂色av一区二区三区蜜臀| 国产精品成人一区二区| 日韩欧美亚洲视频| 夜间精品视频| 亚洲视频专区在线| 国产伦精品一区三区精东| 电影一区二区三区久久免费观看| 日本久久一区二区三区| 日韩 欧美 视频| 免费高清在线观看| 国产日韩欧美精品综合| 麻豆亚洲一区| 香蕉视频黄色片| 成人手机电影网| 99国精产品一二二线| 一区二区精品视频在线观看| 天堂成人国产精品一区| 97人人做人人爱| 国产亚洲成人精品| 国产字幕视频一区二区| 另类专区欧美制服同性| 欧美h片在线观看| 日韩黄色大片网站| 在线视频免费一区二区| 鲁丝一区二区三区| 日本欧美高清| 日韩久久免费视频| 泷泽萝拉在线播放| 深爱激情久久| 亚洲女人被黑人巨大进入| 亚洲永久无码7777kkk| 成人性生交大片免费看中文视频| 日韩三级视频中文字幕| 杨幂一区二区国产精品| 国语精品视频| 精品国产污污免费网站入口| 波多野结衣三级视频| 亚洲午夜免费| 亚洲国产精品va在线看黑人| 人妖粗暴刺激videos呻吟| 精品精品国产三级a∨在线| 亚洲第一色在线| 网站免费在线观看| 在线一级成人| 中文字幕亚洲一区二区三区五十路| 日本少妇xxxxx| 欧美gay男男猛男无套| 久久久成人精品| 青青草原免费观看| 亚洲承认在线| 国产成人精品电影久久久| 国产日韩久久久| 麻豆91小视频| 不卡日韩av| 午夜成人免费影院| 国产亚洲精久久久久久| 一区不卡视频| 丁香花电影在线观看完整版| 欧美日韩在线视频首页| 在线免费观看视频黄| 国产欧美88| 亚洲国产精品va在线看黑人动漫 | 色爱区成人综合网| 调教视频免费在线观看| 一区二区国产盗摄色噜噜| 极品美女扒开粉嫩小泬| 日本一区二区电影| 日韩欧美一区二区在线视频| 亚洲精品乱码久久久久久不卡| 欧美丝袜一区| 欧美激情综合色综合啪啪五月| 中文字幕免费在线观看视频| 精品亚洲成a人| 国产一区二区三区黄| 成人全视频高清免费观看| 一区二区三区在线视频免费观看| 亚洲熟妇无码另类久久久| 九九九精品视频| 亚洲国产日韩欧美在线99| 人妻视频一区二区| 国产精品草草| 国产欧美精品一区二区| 婷婷五月综合激情| 亚洲婷婷综合色高清在线| 国产a视频免费观看| 精品亚洲a∨一区二区三区18| 亚洲片在线观看| 欧美黑人猛猛猛| 日韩精品一卡二卡三卡四卡无卡| av资源站久久亚洲| 午夜毛片在线| 日本久久电影网| 黄色性视频网站| 91精品国产成人观看| 国产成人+综合亚洲+天堂| 欧美一级淫片aaaaaa| 国产精品久久久久久久久免费丝袜 | 国产探花一区二区| 97色在线播放视频| www.日本在线观看| 国产精品国产馆在线真实露脸| 黄色片视频在线免费观看| 一区二区中文字幕在线观看| 日韩视频一区在线| 在线观看黄色国产| 国产天堂亚洲国产碰碰| 国产69精品久久久久久久| 亚洲亚洲一区二区三区| 久久综合国产精品台湾中文娱乐网| 999视频在线| 91日韩一区二区三区| 久久99久久99精品| silk一区二区三区精品视频| 欧美精品手机在线| 国产sm主人调教女m视频| 国产精品国产自产拍高清av王其| 青青草精品视频在线观看| 免费看成人吃奶视频在线| 97超级碰碰人国产在线观看| 蜜桃91麻豆精品一二三区| 亚洲精品综合在线| 一区二区三区人妻| 综合国产在线| 99一区二区| 动漫一区二区| 日韩不卡中文字幕| 久久夜靖品2区| 91丨porny丨国产入口| 水蜜桃色314在线观看| 精品伊人久久久| 91精品国产高清自在线| 亚洲 国产 欧美 日韩| 黑人欧美xxxx| 国产精品密蕾丝袜| 免费精品视频在线| 韩国黄色一级大片| 波多野结衣在线一区二区| 欧美国产日韩免费| 手机在线精品视频| 色婷婷久久99综合精品jk白丝| 西西444www无码大胆| 日韩国产一区二| 亚洲人123区| 久久精品女人的天堂av| 色吧亚洲日本| 亚洲视频免费一区| 97精品人妻一区二区三区| 亚洲精品高清视频在线观看| 久草免费资源站| 亚洲专区一区| 亚洲一区三区视频在线观看| 国产在线一区不卡| 97精品国产97久久久久久| 日本一本草久在线中文| 在线观看网站黄不卡| 5566中文字幕| 成人动漫中文字幕| 久久九九国产视频| 中文字幕一区二区av| 精品国产中文字幕| 国产激情欧美| 欧美精品中文字幕一区| 亚洲 精品 综合 精品 自拍| 欧美亚洲国产一区二区三区 | 亚洲天堂精品视频| 给我免费观看片在线电影的| 奇米一区二区三区av| 免费日韩在线观看| 国产精品三级| 亚洲最大福利网| 四虎成人在线| 久久久久亚洲精品| 天堂资源在线中文| 日韩麻豆第一页| 精品黑人一区二区三区国语馆| 黑人精品xxx一区| 国产精品老熟女一区二区| 国产亚洲欧美激情| 欲求不满的岳中文字幕| 寂寞少妇一区二区三区| 国产最新免费视频| 永久亚洲成a人片777777| 欧美精品二区三区四区免费看视频 | 91豆麻精品91久久久久久| 看片网站在线观看| 亚洲国产精品高清| 国产又黄又粗又猛又爽的视频 | 成人做爰www看视频软件| 久久机这里只有精品| 国产精品宾馆在线精品酒店| 午夜久久美女| 中日韩在线视频| 精品产国自在拍| 九色一区二区| 粉嫩的18在线观看极品精品| 91精品国产综合久久男男 | 91精品国自产在线观看 | 黑人另类av| 日韩中文字幕视频网| 国产精品女人久久久久久| 欧美办公室脚交xxxx| 久久久最新网址| 最爽无遮挡行房视频在线| yw.139尤物在线精品视频| 大胆av不用播放器在线播放| 精品亚洲男同gayvideo网站| 蜜臀久久精品久久久久| 日韩三级.com| av加勒比在线| 欧美丰满嫩嫩电影| 一级特黄色大片| 欧美揉bbbbb揉bbbbb| 欧美成人一区二区三区四区| 精品日本美女福利在线观看| 天天操天天射天天爽| 亚洲一区二区欧美日韩 | 色视频一区二区| 人人妻人人爽人人澡人人精品| 婷婷综合久久一区二区三区| 久久久久成人网站| 亚洲电影激情视频网站| 免费毛片在线播放免费| 亚洲影视在线观看| 国产成人无码精品久在线观看| 午夜精品福利久久久| 国产成人免费观看视频| 欧美日韩亚洲视频| 久久久久久不卡| 91高清视频免费看| 一区二区三区亚洲视频| 欧美精品丝袜久久久中文字幕| 在线观看国产黄| 91精品麻豆日日躁夜夜躁| 国产乱叫456在线| 日韩欧美一级二级三级| 欧美特黄一级视频| 亚洲欧美色图片| 生活片a∨在线观看| 另类专区欧美制服同性| 精品精品导航| 欧美专区在线观看| 国产成人精选| 99视频国产精品免费观看| 乱亲女h秽乱长久久久| 欧美日韩精品免费观看视一区二区| 沈樵精品国产成av片| 一区二区在线不卡| 欧美日本免费| 可以在线看的av网站| 久久久久网站| 国产成人强伦免费视频网站| 成人免费的视频| 法国空姐电影在线观看| 亚洲欧洲99久久| 日产精品久久久久| 欧美色图免费看| 亚洲黄色一级大片| 亚洲网址你懂得| 91麻豆国产福利在线观看宅福利| 97国产一区二区精品久久呦 | 999亚洲国产精| 日本在线观看免费视频| 国产精品夜夜爽| 欧美 变态 另类 人妖| 国产精品国产精品国产专区不片| 国产午夜精品无码一区二区| 欧美在线一区二区| 精品人妻少妇嫩草av无码专区 | 国产区在线看| 国内精品视频一区| 青青草国产一区二区三区| 国产亚洲一区在线播放 | 青青青青草视频| 美国av一区二区| 日批在线观看视频| 中文字幕在线不卡一区| 国产精品久免费的黄网站| 欧美一级视频精品观看| 国产小视频在线| 久久久久成人精品| 久久亚洲精品中文字幕| 麻豆成人av| 最新日韩在线| 久久精品亚洲天堂| 国产午夜精品在线观看| 日韩三级一区二区三区| 日韩一区国产二区欧美三区| 国产高清自拍视频在线观看| 久久免费视频这里只有精品| 国产精品99久久免费| 色之综合天天综合色天天棕色| 在线看片一区| 伊人久久久久久久久| 国产精品福利影院| 国产精品自拍第一页| 日韩黄色在线免费观看| 欧美videos另类精品| 成人在线免费观看视视频| 美日韩中文字幕| 777久久久精品一区二区三区| 国产毛片精品国产一区二区三区| 夫妇交换中文字幕| 日本道免费精品一区二区三区| 手机在线精品视频| 国产69精品99久久久久久宅男| 国产精品亚洲综合在线观看| 亚洲精品成人a8198a| 日韩精品一二三四| 极品人妻一区二区三区| 天天av天天翘天天综合网| 亚洲乱色熟女一区二区三区| 久久国产精品偷| 国产精品亚洲欧美一级在线| 在线观看日韩片| 黄色日韩网站视频| 极品色av影院| 91精品国产综合久久精品| 日本视频在线观看| 国产原创欧美精品| 99久久激情| 污免费在线观看| 亚洲最快最全在线视频| 亚洲欧美另类视频| 久久久久免费视频| 精品自拍偷拍| 免费无码国产v片在线观看| 久久久亚洲国产美女国产盗摄| 天堂网一区二区三区| 日韩成人在线观看| 91精品xxx在线观看| 色综合久久av| 久久国产精品露脸对白| 国产免费久久久久| 日韩欧美一级二级三级| 蜜桃传媒在线观看免费进入| 国产精品免费一区二区三区观看| 亚洲欧洲日本mm| 噜噜噜在线视频| 在线免费av一区| 黄色大片在线播放| 999国产在线| 国产日韩高清一区二区三区在线| 在线 丝袜 欧美 日韩 制服| 91九色02白丝porn| 爆操欧美美女| 国产一区二区久久久| 久久久久久网| 手机在线中文字幕| 精品播放一区二区| xxx欧美xxx| 伊甸园精品99久久久久久| 国产91精品欧美| 黄色免费av网站| 久久成年人视频| 亚洲+小说+欧美+激情+另类| 黄色三级视频片| 一区二区在线观看免费视频播放| 少妇高潮一区二区三区99小说 | 日韩亚洲欧美一区二区| heyzo一本久久综合| 自拍偷拍色综合| 欧美高清自拍一区| 精品国产一区二区三区小蝌蚪| 6080国产精品| 色素色在线综合| 免费电影网站在线视频观看福利| 日本不卡二区| 国内精品国产三级国产a久久| 97久久久久久久| 久久影院中文字幕| 在线日韩网站| 国产成人av免费观看| 欧美性黄网官网| 91高清在线观看视频| 欧美久久在线| 国产91色综合久久免费分享| 自拍偷拍色综合| 91成人在线播放| 亚欧美无遮挡hd高清在线视频 |