欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 人人天天操 | 欧美激情黄色 | 欧洲精品色 | 国产精品一区二区三区久久 | 在线精品亚洲欧美日韩国产 | 精品72久久久久久久中文字幕 | 成人国产精品一区二区毛片在线 | 国产精品视频网 | 日韩图区| 亚洲日本中文字幕永久 | 亚洲影视在线 | 日韩 欧美 综合 | 亚洲午夜综合网 | 五月婷亚洲 | 久久久久综合 | 精品视频免费在线 | 国产一码二码免费观看 | 亚洲毛片免费看 | 九九久久99综合一区二区 | 亚洲一区二区视频在线观看 | 国产精品久久久久一区二区 | 国产精品99爱免费视频 | 69久久夜色精品国产69 | 国产精品美女久久久久久久久久久 | 四虎1515hhhcom | 精品视频一区二区 | 久久久久国产 | 久久综合婷婷香五月 | 久久这里是精品 | 一区二区三区视频免费 | 干干干操操操 | 99热这里只有精品国产99 | 一级片在线免费观看视频 | 九九视屏| 秋霞影院精品久久久久 | 中国明星一级毛片免费 | 亚瑟天堂久久一区二区影院 | 欧美日韩国产网站 | 2021最新国产精品一区 | 久久99深爱久久99精品 | 国产永久福利 |