《Scala函式式程式設計》第二章練習題

2021-09-27 09:49:24 字數 1165 閱讀 6024

2.1

寫乙個遞迴函式,來獲取第n個斐波那契數,前兩個斐波那契數0和1,第n個數總是等於它前兩個數的和一串行開始為 0、1、1、2、3、5。應該定義為區域性( local )尾遞迴函式。

package com.lxuex.test.scala

object scala_01 else

}local(7)

} def main(args: array[string]):unit =

}

2.2

實現issorted方法,檢測array[a]是否按照給定的比較函式排序:

package com.lxuex.test.scala

object test02 ))

} def issorted[a](as: array[a], ordered: (a,a)=>boolean):boolean =

loop(0)

}}

2.3

我們看另乙個柯里化10 ( currying)的例子,把帶有兩個引數的函式f轉換為只有乙個引數的部分應用函式f。這裡只有實現可編譯通過。

def curry[a,b,c](f: (a, b) => c): a => (b => c)

def curry[a, b, c](f: (a, b) => c): a => (b => c) =  (a:a)=>((b:b) => f(a, b))
2.4

實現反柯里化( uncurry ),與柯里化正相反。注意,因為右箭頭=>是右結合的,a => (b=>c)可以寫為a=>b=>c。

def uncurry[a,b,c](f: a => b => c): (a, b) => c

def uncurry[a,b,c](f: a => b => c): (a, b) => c = (a:a,b:b)=>f(a)(b)
2.5

實現乙個高階函式,可以組合兩個函式為乙個函式。

def compose[a,b,c] (f: b => c, g: a => b):a=> c

def compose[a,b,c](f: b => c, g: a => b): a => c = (a: a)=>f(g(a))

Scala併發程式設計第二章練習題2

二 實現乙個名為periodically的方法,該方法接收乙個用於度量時間的引數duraction 單位為毫秒 和乙個執行計算操作的 塊b。每經過乙個由引數duraction設定的時間段,該方法都應該執行乙個執行 塊b的執行緒,該方法需要擁有下列簽名 def periodically duracti...

第二章 練習。

1.正因子問題。include include int main printf d count return 0 注意 if if 如果是 if n i 0 count if i n i count 會比正確結果多一。可以用以下程式檢驗,看中間結果。include include int main ...

第二章練習

2 2 多條簡單訊息 將一條訊息儲存到變數中,將其列印出來 再將變數的值修改為一條新訊息,並將其列印出來。message this is a string.print message this is a string.message this is another string.print mess...