2012/12/11

Haskell List

List名詞對資訊界的各位並不陌生,尤其對剛學完資料結構的我更為不陌生XDD,因為上學期剛教完資料結構而已,所以我還記得這個單字!!

List其實用白話的說法就是清單,就像是老闆可能交待你什麼工作,你得把工作寫下來變成一張厚厚的清單XD

工作也可能會分第一項底下有哪幾個小項目,所以又可以再把工作細分,細分之後它仍然是個清單只是把工作切的更細而已!



let a =[1,2,3,4,5,6,7,8,9,10],這行是設定一個全域變數。輸入a則會輸出List數值


那如果想把List跟另一個List結合起來必須使用到 ++ 函數。這個函數能讓兩個不一樣的字串合併,將剛設定變數加上[11,12,13,14,15,16,17,18,19,20],則會輸出如下圖的數值



但是呢全域變數使用++後,並不會變成新的List,要特別注意




接著我們將字元加入字串的最前頭,加入時必須在中間使用:函數



剛剛不是有設定好一個List了嗎?測試看看可不可以透過函數將5加入該List前頭?結果是可以的



!!來取得List的某個值,函數後面必須接想取得得範圍,才能正確的取得到值喔,不然可能會出現一些錯誤,對了初值是0而不是1喔



再來建立一個細部的List b




再來建立一個細部的List c



來複習一下++的操作吧!!將a++b看會產生怎樣的結果?結果就是會發生錯誤,因為一個是普通的List,另一個是細部List,所以當然不能將兩者合併在一起




那使用:函數試試看可不可以將a插入到b的前頭呢?結論是可以的


來複習一下!!函數吧,取得b的第2個值,則會取得到List的第二個值



接著在介紹一個函數>,這個函數是用來比較大小的,也可以用來比較List的大小,跟平常語言的比較方式是相同的,不過List是比數量多寡


將剛剛所使用過得的!!以及++函數建立成新的List d,結果又變成一個新的List


再來建立一個List e,由兩個條件產生出來的List


再來建立一個List f,不過沒有用中括號來包住兩個條件輸出的值,試試看會不會有錯?其實是會得,因為當前面的條件執行完,則會將值在給f了,那後面條件沒辦法在寫入f,所以會產生錯誤


再來測試新函數head,head這函數是取得到前頭的值,有點類似!! 0這條件


tail函數則是將List的第一個值刪除


再來對細部List來使用tail的話,會將最前面的List刪除


last函數則是取得最後的值




init函數則是將後面的值去除掉,就是tail的反向函數


List裡面如果只有一個值,使用init則會變成一個NULL的List


length函數則是用來取得該List的長度


reverse函數則是將List反過來,如果是細部List則裡面的List值不會變,而是各個List會交換位置


take函數則是取得List 0到n的值,如果List只有5個值,輸入 take 10也是只會得到那5個值,而不會產生錯誤。


drop函數則是拋棄0到n的值


那如果List只有5個值,則使用drop 15,也如同take函數一樣,到達臨界值就不會再去做拋棄的動作了


maximum函數則是會取得List最大的值,如果是細部List則會取得最後的List


sum函數則是可以將全部加總起來



`elem`這個特殊的函數可以去判斷值是否有在List



要寫完這篇其實是真的很累人的,尤其前幾天還在大陸打了很多字,但卻沒辦法儲存,打起來真是有給他累到的,尤其圖片真的好多喔,不過至少撐到最後啦!!


參考文章:
http://learnyouahaskell-zh-tw.csie.org/zh-tw/ready-begin.html#