欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 2197 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條評論
主站蜘蛛池模板: 国产精品久久婷婷六月丁香 | 国内精品一区二区三区 | 日韩欧美h | 国产成人精品日本亚洲11 | 黄在线观看在线播放720p | 正在播放国产精品 | 成人av网站免费观看 | 精品国产福利片在线观看 | 国产精品第一页在线 | 91免费永久国产在线观看 | 91在线观看视频 | 欧美日韩精品一区二区 | 性色av一区二区三区 | 欧美爽爽爽爽爽爽视频 | 男进女内免费视频无遮挡 | 天天撸影院| 波多久久夜色精品国产 | 99久久国产综合精品网成人影院 | 精品一区二区三区不卡 | 精品毛片 | 超碰激情 | 免费欧美黄色 | jdav视频在线观看免费 | 国产精品97 | 精品的一区二区三区 | 日本综合欧美一区二区三区 | 欧洲男女下面进出的视频 | 欧美精品一区三区 | 91香蕉视频导航 | 欧美偷偷操 | 波多野结衣免费观看视频 | 精品国产一区二区三区香蕉沈先生 | 性色视频在线 | 一级做a爰片性色毛片男 | 三级黄毛片 | 欧美黄色第一页 | 午夜不卡一区二区 | 999久久久久久久久6666 | 久色视频在线观看 | 奇米 影音先锋 | 美女操网站 |