欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++模版編程實現Haskell的函數模式匹配特性[圖]-創(chuàng)新互聯(lián)

C++模版編程實現Haskell的函數模式匹配特性[圖]:
大神 Bartosz Milewski 在2009年寫了一篇文章《What Does Haskell Have to Do with C++?》,使用C++實現Haskell函數式編程語言的一些特性。【傳送門在文末】
其中有這樣一段例子:
// code 1
1.template<int n>class fact {
2.public:

創(chuàng)新互聯(lián)秉承實現全網價值營銷的理念,以專業(yè)定制企業(yè)官網,網站設計、網站建設微信小程序開發(fā),網頁設計制作,成都手機網站制作,網絡營銷推廣幫助傳統(tǒng)企業(yè)實現“互聯(lián)網+”轉型升級專業(yè)定制企業(yè)官網,公司注重人才、技術和管理,匯聚了一批優(yōu)秀的互聯(lián)網技術人才,對客戶都以感恩的心態(tài)奉獻自己的專業(yè)和所長。
  1. staticconstint value = n * fact<n -1>::value;
    4.};
  2. 6.template<>class fact<0>{// specialization for n = 0
    7.public:

  3. staticconstint value =1;
    9.};
    注:原文中使用的是struct關鍵字,這里改為class并加上了public
    我猜,你沒看懂。沒關系,我們先跳過上面這一段有著【令人恐怖的語法】的C++模版代碼。
    上面的例子想干嘛呢?其實它只是想計算n的階乘。
    C++模版編程實現Haskell的函數模式匹配特性[圖]
    如果你在C語言里面學過遞歸,應該知道下面這段計算階乘的遞歸函數
    // code 2
    int fact(int n){
    if(0== n )
    return1; //0階問題答案。0! 等于1
    else
    return( n fact( n -1)); //問題降階:n階->n-1階
    }
    它的效果就等于下面的代碼
    // code 3
    int fact2(int n){ // 用 for 循環(huán)計算階乘
    int p =1;
    for(int i=n; i >=1; i--)
    p
    = i;
    return p;
    }
    那么,第一段代碼(code1)與第二段代碼(code2)的區(qū)別在哪里呢?
    區(qū)別在于,code1是在編譯時(由編譯器)計算的,code2是在運行時(就是代碼運行的時候)計算的。
    現在來解釋一下code1 (部分根據Bartosz Milewski文中的說法)
    // code 1
    / 第1行代碼聲明了一個類模版 fact。
    這個模版接受一個“非類型參數”n,
    n是整數。
    /
    1.template<int n>class fact {
    2.public:
    / 第3行代碼聲明了一個靜態(tài)整型常量
    成員 value。而 value 的值是使用
    遞歸模版表示的
    /
  4. staticconstint value = n * fact<n -1>::value;
    4.};
  5. / 第6行代碼是“特化”類模版fact,
    也就是顯式地給出某種類型參數的
    類模板的一個實例的代碼,而非由
    編譯器生成。
    在這里,是給出了參數n為0時模板
    fact的代碼。這樣,編譯器不會再
    根據類模版fact生成n=0時的代碼
    關于模版特化,詳見文末鏈接
    /
    6.template<>class fact<0>{// specialization for n = 0
    7.public:

  6. static const int value = 1;
  7. };
    / 根據C++規(guī)范,模版特化的代碼必須
    放到模版聲明之后。
    因此上面的代碼看上去好像先處理了
    由n階到n-1階的降階問題,然后再給
    出了0階的解答
    這可不像code2。code2中有if/else,
    因此可以把降階代碼與0階解答代碼調
    換先后次序(當然if條件得改)。
    /
    那么這個用模版計算階乘的代碼(類?)該怎么用呢?如下:
    cout <<"Factorial of 0 = "<< fact<0>::value << endl;
    其中,C++編譯器會為“fact<0>::value”這個調用匹配最合適的模版代碼,也就是code1中的第6-9行代碼。
    如果用非零參數調用呢?
    cout <<"Factorial of 8 = "<< fact<8>::value << endl;
    其中,C++編譯器會為“fact<8>::value”這個調用匹配code1中的第1-4行代碼。
    前面blahblhaaaaaaaaaaaah講了一大堆,其實都不是正經事兒。
    正經是下面的Haskell代碼:
    //code 4
  8. fact 0=1
  9. fact n = n * fact (n -1)
    上面兩行代碼定義了函數fact。fact是函數名,fact的后面、等號的前面是函數的參數。等號后面是函數體,函數體的計算結果就是fact函數的返回值。
    當程序員調用【fact 8】的時候(參數是8,因為Haskell函數調用一般不像C++那樣給參數加括號),Haskell會將之匹配到上面代碼的第2行。誰動了我的奶酪讀書筆記(http://www.simayi.net/dushubiji/6208.html)摘抄好詞好句及感悟賞析,這種參數匹配,是Haskell特有的函數聲明與調用方式。

    所以前面的code1中C++模版代碼,就是在模仿 code4 中的Haskell代碼。
    下面給出一個完整的Haskell程序
    moduleFactwhere
    importSystem.IO
    fact::Integer->Integer
    fact0=1
    fact n = n * fact (n-1)
    main::IO()
    main=do
    putStrLn $"8! = "++ show (fact 8)
    putStrLn $"88! = "++ show (fact 88)
    上面的代碼輸出結果是:
    8! = 40320
    88! =185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000
    Haskell對C++說:我能算88!,你行嗎?
    C++說:你欺負人!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章標題:C++模版編程實現Haskell的函數模式匹配特性[圖]-創(chuàng)新互聯(lián)
轉載來源:http://aaarwkj.com/article0/gopio.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、網站改版面包屑導航、標簽優(yōu)化、品牌網站設計軟件開發(fā)

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網站優(yōu)化
久久精品国产亚洲成人av| 99麻豆久久久精品国产| 日韩av专区在线免费观看| 国产精品久久综合网| 91伊人手机在线观看| 国产熟女肥臀精品国产馆乱| 日本一区二区三区在线观看视频| 97在线视频在线播放| 欧美日韩国产精品久久乐播| 免费女性啪啪无遮挡网站| 国产亚洲精品免费视频| 亚洲邻家人妻一区二区| 免费观看欧美日韩论理电影| 国产成人性生交大片免费| 国产精品日韩欧美一区二区| 国产午夜在线影院一区二区| av岛国不卡一区二区在线观看| 国产亚洲精品久久久9| 岛国少妇av之中文字幕| 男女裸体做爰一进一出视频| 亚洲欧美一级二级三级| 果冻国产精品麻豆成人av| 色婷婷综合激情一区二区| 亚洲欧美日韩精品区| 国产白丝精品爽爽久久| 国产亚洲中文久久网久久| 在线观看高清免费国产| 国产美女被狂操到高潮| 中文色婷婷国产精品视频| 国产白浆一区二区视频| 中文字幕国产精品一二区| 内地精品露脸自拍视频| 欧美熟妇精品一级视频| 双高干文男女主都很强| 91精品夜夜夜一区二区| 亚洲成人午夜激情在线| 日本五十路亲子在线一区| 亚洲国产精品综合久久久| 亚洲av成人噜噜网站| 国精品91人妻一区二区| 夫妻过性生活视频播放|