1 編寫函式values(fun:(int)=>int,low:int,high:int),該函式輸出乙個集合,對應給定區間內給定函式的輸入和輸出。比如,values(x=>x*x,-5,5)應該產出乙個對偶的集合(-5,25),(-4,16),(-3,9),…,(5,25)
分析:輸入是乙個f:(int)=>int的函式及2個int表示上下界 ,輸出是乙個對偶的集合,每乙個對偶對應乙個元素x及f(x)的結構,所以想到使用拉鍊將輸入元素集合及其對應運算結果f(x)組合,形成對偶集合,**如下
object test
def values(fun:(int)=>int,low:int,high:int)= (low to high).zip((low to high).map(fun(_)))
}
輸出
2 如何用reduceleft得到陣列中的最大元素?
object test
def getmax(arr: array[double]) =
}
輸出
3 用to和reduceleft實現階乘函式,不得使用迴圈或遞迴
object test
def n(n: int) =
}
輸出
4 前乙個實現需要處理乙個特殊情況,即n<1的情況。展示如何用foldleft來避免這個需要。
foldleft可以設定乙個初始左值,將其設定為1
object test
def n(n: int) =
}
當輸入n為負值時,輸出1 不會報錯
5 編寫函式largest(fun:(int)=>int,inputs:seq[int]),輸出在給定輸入序列中給定函式的最大值。舉例來說,largest(x=>10*x-x*x,1 to 10)應該返回25.不得使用迴圈或遞迴、
object test
def largest(fun:(int)=>int,inputs:seq[int])=
val f=(x:int)=>10*x-x*x
}
6修改前乙個函式,返回最大的輸出對應的輸入。舉例來說,largestat(fun:(int)=>int,inputs:seq[int])應該返回5。不得使用迴圈或遞迴
這兩個題類似 不同的是乙個是求值 乙個是求索引
object test
def largest(fun:(int)=>int,inputs:seq[int])=
val f=(x:int)=>10*x-x*x
}
《快學scala》12章練習答案
最近看了看 快學scala 比較好的點在於這本書每一章後面都有一些練習,可以自己去做一下,對於掌握知識來講還是不錯的 像是以前上學後面的習題一樣 我不知道 有答案,也沒有認真找過,就自己做了做。iteye上有乙個人寫了前幾章的答案,可以參考一下,鏈結為 遺憾的是這個人只寫到第九章,我上面的鏈結也是第...
《快學Scala》第12章 高階函式 學習筆記
scala混合了物件導向和函式式的特性。在函式式程式語言中,函式時 頭等公民 可以像任何其他型別一樣被傳遞和操作 只需要將明細動作包含在函式當中作為引數傳入即可。本章要點概述 在scala中,可以在變數中存放函式 import scala.math.val num 3.14 valfun ceil ...
快學Scala第二章學習筆記
1 如果在repl中貼上成塊的 可以鍵入 paste,把 貼上進去,ctrl d結束 2 在scala中,塊包含一系列的表示式,其結果也是乙個表示式。快中最後乙個表示式的值就是塊的值。這種特性對於那種某個val初始化需要分多步完成的情況很有用。例如 val distance 3 x y 1 別這樣寫...