scala
作為函式式語言,函式自然是頭等公民…
乙個接收函式作為引數的函式稱為高階函式
比如定義如下:
defvalueatonequarter(f: (double) => double) = f(0.25)
這個函式接收乙個引數為
double
返回值為
double
的函式作為引數。
高階函式還可以是返回乙個函式作為引數的函式,如下
defmulby(factor : double) = (x : double) => factor * x
valquintuple = mulby(5)
quintuple(20)
mulby
的型別為:
(double)=> ((double) => double)
這裡的高階函式看上有點蛋疼,他的用處在於可以將乙個多引數的函式轉換成幾個一元函式。(後面知道這種叫閉包,並且也是柯里化的結果)
呼叫valueatonequarter
函式時,如果傳入的引數是匿名的,呼叫可以是以下方式:
valueatonequarter((x: double) => 3 * x)
由於型別推斷的存在以上呼叫的最終簡化版是
valueatonequarter(3* _)
scala:
defruninthread(block : () => unit)
}.start()
}上面**
runinthread
函式的引數是乙個無引數無返回值的函式
呼叫**如下
runinthread
看上去**並不美觀(
()=>
),這裡
scala
允許一種
換名呼叫表示法
: 在引數宣告和呼叫該函式引數的地方省略
() ,
但是在宣告的地方保留
=> ,
如下:
defruninthread(block : => unit)
}.start()
}現在呼叫可以變成下面這樣:
runinthread
看看下面神奇**:
defuntil( condition : => boolean)(block : => unit)
}來看看呼叫:
var x =10
until (x== 0)
以上**類似於
while
迴圈,只不過把條件反過來了,乙個函式定義利用遞迴、柯里化、以及換名呼叫就實現了乙個自定義版本的
while
package demo
/** * @author administrator
*/object scalahighmethod
val r = values(-5, 5, x => x * x)
r.foreach(println)
r.foreach(p => println(p._1 + "->" + p._2))
val ar = array(4, 6, 9, 12, 45, 2, 5, 14, 12, 46)
val maxv = ar.reduceleft((v1: int, v2: int) => )
val maxv2 = ar.reduceleft(_ max _)
println(maxv)
val fun = (x: int) => (1 to x) reduceleft (_ * _)
val fun2 = (x: int) => (1 to x).foldleft(1)(_ * _)
println(fun(4))
println(fun2(4))
println(largest(x => 10 * x - x * x, 1 to 10))
println(largest2(x => 10 * x - x * x, 1 to 10))
val pairs = (1 to 10) zip (11 to 20)
pairs map (adtopair(_ + _)) foreach
//原集合並沒有變化
pairs foreach
println(adtopair(_ * _)(6, 7))
val strs = array("yang", "ming", "wei")
val ints = array(4, 4, 3)
println(corresponds(strs, ints, _.length == _))
val vc = 10
unless(vc > 10)
} def corresponds(arg1: seq[string], agr2: seq[int], fun: (string, int) => boolean) =
def adtopair(p: (int, int) => int) =
def largest(fun: (int) => int, input: seq[int]) =
def largest2(fun: (int) => int, input: seq[int]) =
} def until(condition: => boolean)(block: => unit)
} def unless(condition: => boolean)(block: => unit)
} def values(low: int, high: int, fun: (int) => int) =
ab}}
python高階學習筆記(一) 高階函式
filter filter 函式接收乙個 函式 f 和乙個list 這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如,要從乙個list 1,4,6,7,9,12,17 中刪除偶數,保...
scala學習筆記 高階函式
scala混合了物件導向和函式式的特性。在函式式程式語言裡,函式是 頭等公民 也就是說函式很重要,它可以像任何其他資料型別一樣被傳遞和操作。也就是說,函式可以作為乙個值傳給乙個變數。在scala中,函式是 頭等公民 就和數字一樣。可以在變數中存放函式 val a ceil val b sqrt 當然...
scala學習筆記 十一 Queue stack
一 queue佇列是fifo 先進先出 queue分可變和不可變 immutable queue and mutable queue import scala.collection.mutable.queue var ints queue int var fruits queue string va...