亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

《Learn You a Haskell for Great Good!》讀書

系統 2139 0
這里
就是那本“書”了;
在線版的,周末看了1,2,3,4,5章,做個小記錄吧,狠有意思;
這里準備記些個...那個...點,不是每點都記,也不需要每點都記,總體來講haskell程序還是基于灰常一致的規則運行著的(binding & applying),我想記的只是一些內建函數的備忘、special form和一些syntax sugar,作為以后參考;
首先是list&tuple operation:
list:
==============
連接 ++
cons operator :
逐個比較 ><>=<==
取值 head,tail,last,init
運算 length,null,reverse,take,drop,maximum,minimum,sum,product,elem
生成 cycle,repeat,replicate,[outputFunc l set+,predicate*]
?? zip

tuple:
==============
取pair第一個 fst
取pair第二個 snd

然后是type classes:
==============
感覺這個type class是haskell的核心概念所在,要注意的一點就是haskell是靜態類型強類型的語言,type就是指類型,常見的類型有Int,Integer,Double,Char,Bool等等,如果非要跟java、c++等等面向對象語言做個比較的話,這個type就相當于面向對象語言中的class,表示某種類型的值;那么,type class是什么呢?其實type class是對眾多types進行分類,把所有的type,按照特性,分成了一個個群組,這些群組就叫做classes..由于是type的群組,所以就叫做type classes了,不能把這個class和java中的class搞混...
好了,那么haskell內定了哪些type和type classes呢?記在這張強大的圖上:
《Learn You a Haskell for Great Good!》讀書筆記(一)
這個圖可能會成為haskell編程中必不可少的手冊...
從圖上看得出來把各種type放到合適的type class中不是一件容易的事,需要小心翼翼并經過反復論證決定要建立哪些class,然后再小心翼翼并反復論證是否某個type該被放入某個class中...當然,haskell的設計者們都把這些事情做好了,據說是一群Dr.s~為啥說這事情不容易呢?舉個例子:你知道圖中為啥Ord不包含Num呢?數字難道是沒有順序的么?呵呵,其實數字還分實數和虛數...實數和虛數在一起是不能排出個順序來的,所以如果光說“數字”并不代表有順序;像Real就屬于Ord了,因為同是實數的話是有順序的,Real屬于Num,是數字的一種...OK,這個內建type & classes需要在實際編程中去慢慢熟悉的;
Hmmm..這個type class的概念讓你想到什么?集合概念中的文氏圖?我是有點這種感覺...

然后是一些statement和非典型expression記要:
==============
    if..then..else..
  

這是一個expression,為啥呢?因為else部分必不可少...所以haskell的if語句是必然evaluate出一個值的,所以就是expression而非statement了...那么,它就可以被用在任何可以填入expression的地方...比如擠在list comprehension里面...

    pattern xs@(x:y:ys)
  

xs stands for x:y:ys

Guard:

    
方法簽名
	|boolExp = 方法定義
	|...
	|boolExp = 方法定義
	|otherwise = 方法定義

  


where binding:

    
方法簽名、定義
	where xxx=...

  

這里如果xxx也是一個函數的話,那么xxx里面可以還有where結構,也就是說where結構是可以嵌套的;
where形式的binding是一個語法結構而非expression

let binding:

    let a = 9 in a + 1
  

綁定多個值要換行對齊:
    
let sideArea = 2 * pi * r * h  
    topArea = pi * r ^2  
in  sideArea + 2 * topArea

  

若無法換行的情況,可用';'分割:
    let a = 100; b = 200; c = 300 in a*b*c
  

let binding是一種expression

以上的where和let是兩種除了傳參之外的特殊綁定形式,其區別是where是語法結構(或者說statement)而let是一種expression

由于where binding是語法結構,而let-in是expression,where binding可以跨域多個guard而let-in會受限于它所在的scope中

最后是case expression:
    
case expression of pattern -> result  
                   pattern -> result  
                   pattern -> result  
                   ...

  

值得一提的是,函數定義的時候,如果使用pattern matching的定義形式,其實質上是case expression的一種語法糖...
=================================================================
OK,筆記寫到這里,從題目能看出來還沒寫完,實際上這“書”我還沒看完,看過剩下的部分再寫吧...
另外,我發現F#跟haskell神似...
感覺是廢話...那scala還可能神似呢...
囧rz...

《Learn You a Haskell for Great Good!》讀書筆記(一)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 毛片福利视频 | 亚洲黄色成人 | 久久天堂一区二区三区 | 日本高清毛片视频在线看 | 国自产拍在线天天更新2019 | 欧美三级一区二区三区 | 国产一区二区三区在线免费 | 国产精品美女自在线观看免费 | 亚洲欧美综合精品成 | 亚洲毛片免费观看 | 亚洲国产精品不卡毛片a在线 | 国产精品麻豆久久久 | 91精品自在拍精选久久 | 在线成人aa在线看片 | 麻豆久久婷婷综合五月国产 | 亚洲精品一区二区久久久久 | 国产成人h综合亚洲欧美在线 | 免费鲁丝片一级在线观看 | 欧美日韩视频在线第一区 | 性感毛片 | 天天色天天操天天射 | 国语精品91自产拍在线观看二区 | 国产日韩欧美91 | 操熟美女又肥又嫩的骚屁股 | 亚洲欧美综合区自拍另类 | 可以免费观看一级毛片黄a 可以直接看的毛片 | 91精品国产91久久久久青草 | 天天操天天射天天操 | 51啪影院 | 成人看片黄a免费看视频 | 天天骑夜夜操 | 色综合一区 | 日本免费一区二区三区a区 日本免费一区二区三区看片 | 国产日韩欧美成人 | 亚洲va久久久久综合 | 国产精品免费一区二区三区 | 精品免费 | 精品一区二区三区在线观看视频 | 国产精品国产高清国产专区 | dxj久久成国产精品 dxj伊人 | 97在线观看成人免费视频 |