如果已知有以下的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?
講穿了很簡單,但是當初還想了不少時間咧!
沒有留言:
張貼留言