精品欧美一区二区三区在线观看 _久久久久国色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)

毛片a片免费观看| 九九九在线观看视频| 国产 欧美 精品| 美女精品网站| 日韩最新免费不卡| 任你躁av一区二区三区| 成人av观看| 亚洲欧美另类小说| 欧美日产一区二区三区在线观看| 中文字幕第三页| 国产精品啊啊啊| 夜夜嗨av一区二区三区四区 | 国产视频三区四区| 亚洲1区在线观看| 色老汉av一区二区三区| 日韩中文字幕亚洲精品欧美| 偷拍25位美女撒尿视频在线观看| 蓝色福利精品导航| 97成人精品视频在线观看| www.99re6| 中日韩免视频上线全都免费| 欧美一级久久久久久久大片| chinese少妇国语对白| 波多野结衣在线高清| 亚洲日本一区二区三区| 欧美三日本三级少妇三99| www.国产三级| 免费成人av在线| 91av在线免费观看| 妺妺窝人体色www聚色窝仙踪| 日韩成人精品一区| 精品一区二区三区三区| 无码人妻丰满熟妇区毛片蜜桃精品| 亚洲电影有码| 一本色道a无线码一区v| www.av蜜桃| а√天堂在线官网| 国产精品久久久久aaaa| 日韩欧美亚洲在线| 欧美色18zzzzxxxxx| 暴力调教一区二区三区| 成人综合色站| 亚洲精品字幕在线观看| 国产美女精品一区二区三区| 国产日本欧美一区二区三区在线| 欧美特级黄色片| 免费国产自线拍一欧美视频| 国模精品系列视频| 国产无码精品视频| 99精品热视频只有精品10| 欧美激情videos| 久久久香蕉视频| 欧美a级片网站| 久久亚洲精品中文字幕冲田杏梨| 少妇视频一区二区| 日韩欧美一区二区三区在线视频 | 欧美日韩免费在线视频| 91香蕉视频污版| 亚洲第一会所| 欧美伊人久久大香线蕉综合69| 无遮挡又爽又刺激的视频| 欧美××××黑人××性爽| 色老汉一区二区三区| 日韩免费高清在线| 成人全视频免费观看在线看| 欧美日韩一区二区在线观看视频 | 成人深夜在线观看| 国产日韩欧美亚洲一区| 亚洲色图另类小说| 久久久国产午夜精品| 日本一区免费在线观看| av中文资源在线| 亚洲欧美中日韩| 欧美日韩视频免费| 松下纱荣子在线观看| 日韩欧美中文在线| 激情 小说 亚洲 图片: 伦| 久久精品97| 日韩一区二区三区精品视频| 一级全黄裸体片| 亚洲区小说区图片区qvod按摩| 亚洲色图综合久久| √天堂中文官网8在线| 黄色亚洲精品| 国产精品igao视频| 国产黄色美女视频| 91年精品国产| 香蕉视频在线网址| 国产夫妻在线| 欧美亚洲禁片免费| 特种兵之深入敌后| 伊人久久大香线蕉综合网蜜芽| 伊人精品在线观看| 久久亚洲成人av| 日韩精品五月天| av在线不卡一区| 久久久资源网| 亚洲美女免费在线| 国产美女三级视频| 欧美影院在线| 国产亚洲xxx| 久久精品第一页| 日韩电影免费在线看| 成人免费在线看片| 欧美激情午夜| 日韩欧美一区视频| 丰满少妇中文字幕| 不卡中文一二三区| 97久久精品国产| 国产一区二区视频免费观看| 97超碰欧美中文字幕| 成人在线观看www| 日本精品网站| 日韩精品极品视频免费观看| 91高清免费观看| 青娱乐精品在线视频| 92看片淫黄大片欧美看国产片| 男女视频在线观看免费| 亚洲综合视频在线观看| 日日噜噜噜噜久久久精品毛片| japanese色系久久精品| 久久伊人色综合| 精品不卡一区二区| 成人午夜电影网站| 久久免费视频2| 日韩精品一区二区三区av| 亚洲精品白浆高清久久久久久| 极品盗摄国产盗摄合集| 久久er精品视频| 欧洲成人一区二区| 欧美大胆性生话| 亚洲精品国精品久久99热 | 欧美日韩第一区| 国产日韩中文字幕在线| 国外av在线| 欧美性极品xxxx娇小| 丰满岳乱妇一区二区| 欧美精品导航| 91在线精品观看| 国产精品一卡二卡三卡| 欧美福利电影网| 一区二区三区在线播放视频| 奇米777欧美一区二区| 欧美日本亚洲| 日韩一区精品| 国产一区二区动漫| 免费精品一区二区| 国产网站一区二区| 50路60路老熟妇啪啪| 亚洲精品无吗| 国产精品成人国产乱一区| 久香视频在线观看| 在线视频你懂得一区二区三区| 亚洲一区二区三区蜜桃| 日韩激情一区二区| 亚洲电影网站| 91成人在线网站| 久久亚洲国产成人| www.久久成人| 五月天中文字幕一区二区| 国产又粗又长又爽| 久久久亚洲一区| 一区高清视频| 日韩视频在线直播| 国内精品小视频| 欧美日韩免费做爰大片| 欧美在线观看视频一区二区三区 | 亚洲一级二级三级| 美女又爽又黄免费| 老牛嫩草一区二区三区日本| 亚洲ai欧洲av| 亚洲免费一区三区| 97久久超碰福利国产精品…| 免费一级毛片在线观看| 欧美色图在线观看| 久久中文字幕在线观看| 91久色porny| jizz欧美性11| 亚洲一级影院| 日本高清不卡三区| 久久免费精品| 欧美亚洲在线视频| 男人的天堂在线视频免费观看| 91麻豆精品国产综合久久久久久| 国产一级视频在线观看| 久久综合给合久久狠狠狠97色69| 国产成人黄色网址| 最新日韩欧美| 亚洲欧美电影在线观看| 97久久精品| 国产精品成人国产乱一区| 91cn在线观看| 亚洲视频在线看| 精品人妻一区二区三区含羞草| 欧美日韩亚洲精品一区二区三区| 麻豆一区在线观看| 91色九色蝌蚪| 国产精品久久久久久久av福利| 99亚洲精品| dy888午夜| 欧美美女在线观看| 粉嫩av免费一区二区三区| 视频精品导航| 欧美一区二区三区免费观看| av电影免费在线观看| 亚洲欧美在线免费观看| www.日韩高清| 欧美精品高清视频| 欧美在线观看不卡| 亚洲影院理伦片| 日韩精品久久久久久久的张开腿让| 不卡的av在线| 中文字幕欧美视频| 男女激情视频一区| 亚洲午夜精品久久久久久人妖| 99久久精品费精品国产风间由美| 久久久久成人精品免费播放动漫| 国产日韩在线观看视频| 国产精品嫩草影院久久久| 蜜桃视频在线网站| 欧美激情videoshd| 久做在线视频免费观看| 在线日韩第一页| 日本大臀精品| 亚洲精品suv精品一区二区| wwwxxxx国产| 欧美一区二区三区男人的天堂| 中文字幕乱码人妻二区三区| 色综合天天综合| wwwwww国产| 精品久久久久久中文字幕| 精品少妇一二三区| 一区二区三区在线观看动漫| 国产又色又爽又高潮免费| 国产精品污www在线观看| 欧美特黄一区二区三区| 91污片在线观看| 成人网站免费观看| 91网上在线视频| 日韩av一二区| 26uuu国产日韩综合| 亚洲成av人片在线观看无| 国产成人av电影免费在线观看| 999热精品视频| 国产馆精品极品| 日韩av成人网| 成人av在线观| 在线观看国产免费视频| 91老师国产黑色丝袜在线| av小说在线观看| 国产日韩欧美a| 国产精品国产三级国产专业不 | 亚洲精品免费在线看| 欧美亚洲国产精品久久| 视频在线观看成人| 日本久久一二三四| 一区二区视频国产| 午夜欧美精品久久久久久久| 久久久久久av无码免费网站下载| 欧美午夜a级限制福利片| www.成年人视频| 中文亚洲字幕| 欧美一级特黄a| 国产在线播放一区| 天天躁日日躁狠狠躁av| 暴力调教一区二区三区| 91成年人网站| 日韩美女久久久| 久久国产露脸精品国产| 富二代精品短视频| 午夜视频网站在线观看| 欧美精品一二三四| 性中国xxx极品hd| 亚洲乱码国产乱码精品精天堂 | 天美av一区二区三区久久| 欧美韩国日本精品一区二区三区| 成人动漫免费在线观看| 欧美做受777cos| 免费视频一区| 国产成人在线综合| 成人黄色大片在线观看| 国内精品卡一卡二卡三| 亚洲自拍偷拍麻豆| 在线免费观看国产精品| 日韩视频一区在线观看| 色猫av在线| 插插插亚洲综合网| 性欧美freesex顶级少妇| 成人a在线视频| 欧美亚视频在线中文字幕免费| 日韩精品久久久| 影音先锋在线一区| 天天干天天玩天天操| 成人福利视频网站| 国产wwwwxxxx| 欧美性高潮床叫视频| 国产av无码专区亚洲av| 亚洲欧美中文日韩在线v日本| av免费在线免费| 国产97人人超碰caoprom| 日韩一区二区三区精品| 日韩精品一区二区三区外面| 亚洲婷婷免费| 亚洲天堂av一区二区三区| 91在线观看高清| 综合五月激情网| 在线视频国内自拍亚洲视频| 欧美一区,二区| 久99久在线视频| 色综合久久久| 日本一区二区三区www| 亚洲国产高清一区二区三区| 亚洲黄色片免费看| 国产亚洲成av人在线观看导航| 中文在线观看免费网站| 日韩一级在线观看| 日韩av中文| 国产精品久久激情| 亚洲激情播播| 成人免费aaa| 成人福利电影精品一区二区在线观看 | 中文字幕 视频一区| 亚洲老头同性xxxxx| 波多野结衣在线观看| 99九九视频| 影视亚洲一区二区三区| 亚洲精品久久久中文字幕| 国产女人18水真多18精品一级做| 国产精品黄色网| 亚洲精品一区二区精华| 91精品久久| 91精品在线观看视频| 婷婷另类小说| 女人高潮一级片| 亚洲欧洲www| 国产又粗又猛视频| 久久精品成人欧美大片古装| 成人精品国产| 亚洲视频在线观看日本a| 日本不卡中文字幕| 国产午夜精品久久久久久久久| 在线欧美小视频| www日韩tube| 国产精品中文字幕久久久| 精品久久久久久久久久久aⅴ| 欧美污视频网站| 国产网站一区二区| 夜夜爽8888| 久久成人国产精品| 爱情电影网av一区二区| 一级性生活视频| 成人综合婷婷国产精品久久免费| 久久免费播放视频| 亚洲精品国产美女| 日韩网站中文字幕| 一区二区三区观看| 国产精品1区二区.| 国产第一页第二页| 国产视频欧美视频| 深夜视频一区二区| 国产av不卡一区二区| 国产电影一区二区三区| 国产无精乱码一区二区三区| 精品视频在线播放免| 国精产品一区二区三区有限公司| 三级三级久久三级久久18| 精品亚洲欧美一区| 日本少妇裸体做爰| 国产一区二区三区四区福利| 日韩毛片免费看| 中文精品无码中文字幕无码专区| 成人高清在线视频| 免费视频网站在线观看入口| 日韩一区二区在线视频| 1769国产精品视频| 欧美黄网站在线观看| 亚洲欧美影音先锋| 天天操天天干天天| 国产精品色视频| 亚洲精品123区| 一级二级黄色片| 日韩久久免费av| 日韩免费小视频| 国产又粗又长又爽视频| 91视频com| 国产精品无码在线播放| 性欧美办公室18xxxxhd| 日韩一区二区三区免费播放| www.四虎精品| 欧美色中文字幕| 黄色在线观看www| 亚洲最大色综合成人av| 成年人国产精品| 91精品国自产| 日本高清视频一区| 欧美激情无毛| 色综合99久久久无码国产精品| 日韩精品一区二区三区在线播放| 桃色一区二区| 在线视频综合导航|