higher-order functions
這被稱為「高階函式」,既可以當引數傳,也可以當返回值。
最早的形式
def sum(f: int => int, a: int, b: int): int =
if (a > b) 0
else f(a) + sum(f, a + 1, b)
def sumints(a: int, b: int) = sum(id, a, b)
def sumcubes(a: int, b: int) = sum(cube, a, b)
def sumfactorials(a: int, b: int) = sum(fact, a, b)
def id(x: int): int = x
def cube(x: int): int = x * x * x
def fact(x: int): int = if (x == 0) 1 else fact(x - 1)
anonymous(匿名函式)
例如: (x: int) => x * x * x
下面是匿名函式的定義形式:
(x1 : t1; :::; xn : tn) ) e
等價於匿名函式的形式
def sumints(a: int, b: int) = sum(x => x, a, b)
def sumcubes(a: int, b: int) = sum(x => x * x * x, a, b)
def sumfactorials(a: int, b: int) = sum(fact, a, b)
currying
柯里化返回函式的函式
例如:def sum(f: int => int): (int, int) => int =
然後可以def這麼定義:
def sumints = sum(x => x)
def sumcubes = sum(x => x * x * x)
def sumfactorials = sum(fact)
也可以用值定義
val sumints = sum(x => x)val sumcubes = sum(x => x * x * x)
val sumfactorials = sum(fact)
如何使用?
sumcubes(1, 10) + sumfactorials(10, 20)
對於這種返回函式的函式,scala有專門的符合來來程式設計:
def sum(f: int => int)(a: int, b: int): int =
if (a > b) 0 else f(a) + sum(f)(a + 1, b)
Coursera Scala 4 1 函式作為物件
函式型別a b等價於 package scala trait function1 a,b 匿名函式 x int x x等價於 new anonfun 更短的寫法 new function1 int,int 對於函式呼叫,如f a,b f是class type,函式呼叫等價於 所以,如下寫法 val ...
python課程 Python課程
全新python課程 更多關於酷哥少兒程式設計平台 酷哥少兒程式設計 介面 酷哥少兒程式設計體系 酷哥少兒程式設計平台 1 大顆粒程式設計 樂高積木拼搭更有趣了,區別於普通的樂高積木搭建課,酷哥的大顆粒課程加入了,易於讓學齡前兒童接受的刷卡程式設計方式,課程中輕鬆融入程式設計元素。酷哥刷卡程式設計作...
Ruby on Rails全棧課程 課程目錄
前言 我還是程式設計小白的時候,開始接觸ruby,當時學習資料只有ruby實戰聖經,雖然講的已經很詳細了,但是對於小白狀態的我,很多地方還是很模糊,很多地方需要自己摸索,走了不少彎路。所以我下決心寫乙個實戰課程,來幫助和我一樣起跑線的同學攻克ruby語言。該課程完全按照我是小白時候的想要的課程寫的,...