重複出現的lists計算模式
lists的很多函數有相似的結構,重複出現的模式有:
用某個方法轉換每個元素
用某個條件提取元素
用某種方法連結元素
函數式程式設計語言,讓程式員能寫出更通用的計算模式,通過使用高階函數。
将一個list的所有元素,進行轉換。例子:傳回一個新的集合,每個元素乘以factor
上面的模式,可以通過map函數來進行通用性封裝:
(實際上,map的定義更複雜,不僅僅隻支援lists)
使用map,scalelist很容易被實作:
這是另外一個常用的操作。從集合中篩選滿足條件的元素
filter還有其他變種:
xs fileternot p 相當于xs fileter(x=>!p(x))
xs partition p 分區:list(1,0,1,0) partition (>0) // ((1,1),(0,0))
xs takewhile p 用法:1 to 10 takewhile (<5) // (1,2,3,4)
xs dropwhile p 用法:1 to 10 dropwhile (<5) // (5,6,7,8,9,10)
xs span p 用法:1 to 10 span (<5) // ((1,2,3,4),(5,6,7,8)
編寫函數pack滿足:
list("a","a","a","b","b","c","c","a")
=>
list( list("a","a","a"), list("b","b"), list("c","c"),list("a") )
編寫函數encode滿足:
list( list("a",3), list("b",2), list("c",2),list("a",1) )