重复出现的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) )