快學Scala12章參考練習

2021-09-24 23:04:29 字數 1498 閱讀 1856

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 別這樣寫...