-
object sortDemo {
?def qSort(a: List[Int]): List[Int] = {
? ?if (a.length < 2) a
? ?else qSort(a.filter(a.head > _)) ++
? ?a.filter(a.head == _) ++
? ?qSort(a.filter(a.head < _))
?}
?def main(args: Array[String]): Unit = {
? ?println(qSort(List(6,4,5,3,1,2,9,8,0)))
?}
}查看全部 -
實(shí)現(xiàn)快速排序
查看全部 -
Map
定義一個(gè)Map: val p = Map(1 -> "David", 9 -> "Bob")
取出值:p(key), 比如:p(1), p(9)
判斷key是不是在map中: p.contains(key)
取出所有key: p.keys
取出所有值:p.values
添加一個(gè)鍵值: p + (8 -> "Tom")
刪除一個(gè)鍵值: p - 1
添加多個(gè)鍵值對(duì): p ++ List(2-> "Alice", 5 -> "piter")
減去多個(gè)鍵值對(duì): p -- List(1, 9, 2)
查看全部 -
Tuple(元組):
定義2個(gè)字段的元組? (1,2) 或? 1 ->2
訪問(wèn)元組中的元素: z._1 (z元組的第一分量)
Map[K,V]:
定義Map?? val? p = Map(1? ->? "David",9 ? ->"Lili")
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Map(1 -> David, 9 -> Lili)?
p(1)?????? David?? 取p Map 的值
p.contains(1)?? 判斷key在不在? p Map中
p.keys?? 取所有key
p.values? 取所有value
p + ( k -> v)? 添加值
p -? k??? 刪除值
p? ++ List(k -> v ,k -> v)? 添加多個(gè)值
p? --? List(k,k)? 減去多個(gè)值
查看全部 -
Stream 惰性求值
查看全部 -
Range(整數(shù)序列):
生成Range
1 to 10???? Range(1,2,3,4,5,6,7,8,9,10)
1 to 10? by 2??? Range(1,3,5,7,9)
1 until 10? Range(1,2,3,4,5,6,7,8,9)
Stream(惰性求值列表):
列表的第一個(gè)值確定,其他值在使用時(shí)才會(huì)計(jì)算
1? #::? 2 #:: 3 #::? Stream.empty ? ? ? ? ? ? ?? Stream(1,? ?)
val? stream = (1? to? 1000000).toStream???? Stream(1, ?)
.head? 第一個(gè)值
.tail???? 第一個(gè)值后面的所有值
查看全部 -
集合的歸約:
reduceLeft(匿名函數(shù)):將集合中的元素,按匿名函數(shù)的規(guī)則進(jìn)行處理,處理的結(jié)果的類(lèi)型和集合元素的類(lèi)型一致
reduceLeft(op:? (T,T)? => T)
foldLeft(初始值)(匿名函數(shù)):將集合中的元素與初始值,按匿名函數(shù)的規(guī)則進(jìn)行處理,處理的結(jié)果類(lèi)型與初始值類(lèi)型一致。
foldLeft(z? : U)(op: (U,? T) =>U)
查看全部 -
List高階函數(shù):
map:根據(jù)函數(shù)規(guī)則對(duì)List中的每個(gè)參數(shù)做映射
c.map(x=>x.toUpperCase) 等價(jià)于 c.map( _.toUpperCase? )
與filter不同:filter的規(guī)則是Boolean類(lèi)型的
flatMap:將多層的List打平
查看全部 -
List的高階函數(shù):
filter(判斷函數(shù)):遍歷集合,保留符合判斷函數(shù)的元素
toList:將字符串變成List[Char]集合
takeWhile(判斷函數(shù)):遍歷集合,根據(jù)判斷函數(shù)截取集合元素
查看全部 -
//for for?{ ????x?<-?xs ????y=?x+1 ????if(y>0) }yield?y //if if?(exp)?valA?else?valB
查看全部 -
函數(shù) 代碼塊
def?function(?param:?ParamType):?ReturenType={ ????//body }
查看全部 -
三種變量修飾符
val?定義常量,不可修改
var?定義變量
lazy?val?只要第一次使用到時(shí)候,才會(huì)運(yùn)算表達(dá)式得到值
可以不顯示指定變量的類(lèi)型,因?yàn)镾cala會(huì)自動(dòng)進(jìn)行類(lèi)型推導(dǎo)Unit類(lèi)型: 類(lèi)似Java的Void, 一般作為函數(shù)返回值
有Unit一般是副作用,因?yàn)楹瘮?shù)沒(méi)返回值
異常值: ()Nothiong
String
- 構(gòu)建于Java的String之上
- 新增了字符串插值(interpolation)的特性```scala val?myname?=?"lizhy"?\\?creating?a?String s"My?name?is?${myname}"?\\?String?interpolation ```
在scala語(yǔ)言中,所有的事物都是對(duì)象
查看全部 -
在計(jì)算機(jī)科學(xué)領(lǐng)域,函數(shù)式編程是一種編程范式,它是一種構(gòu)建計(jì)算機(jī)程序結(jié)構(gòu)的方法和風(fēng)格,它把程序當(dāng)做數(shù)學(xué)函數(shù)的求值過(guò)程并且避免了改變狀態(tài)和可變的數(shù)據(jù)。
二、函數(shù)式編程的重要概念:
2.1 純函數(shù)(Pure Function),或函數(shù)的純粹性(Purity),沒(méi)有副作用(Side Effect)。
副作用是狀態(tài)的變化(mutation):例子:修改全局變量,拋出異常,IO讀寫(xiě),調(diào)用有副作用的函數(shù)。2.2 引用透明(Referential Transparency):對(duì)于相同的輸入,總是得到相同的輸出。
如果f(x)的參數(shù)x和函數(shù)體都是引用透明的,那么函數(shù)f是純函數(shù)。2.3 不變性(Immutability)為了獲得引用透明性,任何值都不能變化。
2.4 函數(shù)是一等公民(First-class Function):一切都是計(jì)算,函數(shù)式編程中只有表達(dá)式,變量、函數(shù)都是表達(dá)式。
三、高階函數(shù)(Higher order Function)
閉包(Closure)
表達(dá)式求值策略:嚴(yán)格求值 和 非嚴(yán)格求值 ?Call By Value ?vs. ?Call By Name
惰性求值(Lazy Evaluation):定義表達(dá)式不會(huì)立即求值,用到后才會(huì)求值。
遞歸函數(shù),函數(shù)式編程沒(méi)有循環(huán),循環(huán)由遞歸實(shí)現(xiàn)。調(diào)優(yōu)遞歸:尾遞歸。查看全部 -
Scalable編程語(yǔ)言。
純正的面向?qū)ο?/strong>語(yǔ)言。
函數(shù)式語(yǔ)言。
構(gòu)建于jvm之上,能互相直接調(diào)用,無(wú)縫和java互操作。JAVA和SCALA互相直接調(diào)用!
查看全部 -
塊
查看全部 -
快排
查看全部 -
快排
查看全部 -
圖
查看全部 -
柯里化
查看全部 -
高階函數(shù)
查看全部 -
列子2
返回1
bar(1,loop)? ? 先1進(jìn)行計(jì)算,返回1,方法體沒(méi)用到loop 不被調(diào)用
bar(loop,1)一直循環(huán)? ? ? ? ?先loop進(jìn)行計(jì)算,無(wú)法返回
查看全部 -
例子
查看全部 -
求值策略
查看全部 -
match = java 的switch
查看全部
舉報(bào)