這里
就是那本“書”了;
在線版的,周末看了1,2,3,4,5章,做個小記錄吧,狠有意思;
這里準備記些個...那個...點,不是每點都記,也不需要每點都記,總體來講haskell程序還是基于灰常一致的規則運行著的(binding & applying),我想記的只是一些內建函數的備忘、special form和一些syntax sugar,作為以后參考;
首先是list&tuple operation:
list:
==============
tuple:
==============
然后是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呢?記在這張強大的圖上:
這個圖可能會成為haskell編程中必不可少的手冊...
從圖上看得出來把各種type放到合適的type class中不是一件容易的事,需要小心翼翼并經過反復論證決定要建立哪些class,然后再小心翼翼并反復論證是否某個type該被放入某個class中...當然,haskell的設計者們都把這些事情做好了,據說是一群Dr.s~為啥說這事情不容易呢?舉個例子:你知道圖中為啥Ord不包含Num呢?數字難道是沒有順序的么?呵呵,其實數字還分實數和虛數...實數和虛數在一起是不能排出個順序來的,所以如果光說“數字”并不代表有順序;像Real就屬于Ord了,因為同是實數的話是有順序的,Real屬于Num,是數字的一種...OK,這個內建type & classes需要在實際編程中去慢慢熟悉的;
Hmmm..這個type class的概念讓你想到什么?集合概念中的文氏圖?我是有點這種感覺...
然后是一些statement和非典型expression記要:
==============
這是一個expression,為啥呢?因為else部分必不可少...所以haskell的if語句是必然evaluate出一個值的,所以就是expression而非statement了...那么,它就可以被用在任何可以填入expression的地方...比如擠在list comprehension里面...
xs stands for x:y:ys
Guard:
where binding:
這里如果xxx也是一個函數的話,那么xxx里面可以還有where結構,也就是說where結構是可以嵌套的;
where形式的binding是一個語法結構而非expression
let binding:
綁定多個值要換行對齊:
若無法換行的情況,可用';'分割:
let binding是一種expression
以上的where和let是兩種除了傳參之外的特殊綁定形式,其區別是where是語法結構(或者說statement)而let是一種expression
由于where binding是語法結構,而let-in是expression,where binding可以跨域多個guard而let-in會受限于它所在的scope中
最后是case expression:
值得一提的是,函數定義的時候,如果使用pattern matching的定義形式,其實質上是case expression的一種語法糖...
=================================================================
OK,筆記寫到這里,從題目能看出來還沒寫完,實際上這“書”我還沒看完,看過剩下的部分再寫吧...
另外,我發現F#跟haskell神似...
感覺是廢話...那scala還可能神似呢...
囧rz...
就是那本“書”了;
在線版的,周末看了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呢?記在這張強大的圖上:

這個圖可能會成為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...
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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