Coursera Scala課程 第二週筆記

2021-06-22 00:51:57 字數 1457 閱讀 5111

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語言。該課程完全按照我是小白時候的想要的課程寫的,...