code

2016年10月24日 星期一

Scala筆記 8 - 題目動動腦

雖然我很久以前就做過Coursera這門課的題目,但是這次重修了之後,發現還是有一題想了一個多小時才知道怎麼解!

如果已知有以下的function signature:

type Set = Int => Boolean
def exists(s: Set, p: Int => Boolean): Boolean

我們要怎麼implement以下的這個?

def map(s: Set, f: Int => Int): Set


首先,我在這邊提示了用exists來implement map已經是我解題後的後見之明,如果是讀者自己去解題的話,可能還要花不少時間(如果跟我一樣聰明 XD) 才能聯想到要用exists。

Set是一個characteristic function,用來判斷一個integer是否屬於某個set,所以return type為Boolean。

exists則是判斷一個set s中,是否存在某個element x,使得predicate p(x)為true? 如果沒有就回傳false。

map的定義則是如何回傳一個set,其成員為input set s的所有元素都被f transformed過?

其實如果把map如何使用寫出來,就很簡單了,這邊困擾的主要是對functional programming還很不熟悉。

假設s = {1,2,3}, f = x=>2*x, 則被mapped過的set應該要是 {2,4,6}
所以map(s,f)(2) == map(s,f)(4) == map(s,f)(6) == true

所以簡單來說map就是要去s找是否存在一個element經過f之後變成2 or 4 or 6?

講穿了很簡單,但是當初還想了不少時間咧!


沒有留言:

張貼留言