ScalaNote24-模式匹配和高阶函数练习题
书到用时方恨少,很多函数还是不熟悉啊!!!
Exercise01
利用模式匹配,编写一个swap函数,接受一个整数的对偶,返回对偶的两个组成部件互换位置的新对偶
//对偶貌似就是元组的意思,姑且认为他是元组吧
var tuple = (4,5)
println(tuple.getClass)
def swap(tuple:Tuple2[Int,Int])={tuple match{case (x:Int,y:Int)=>(y,x)
}
}
swap(tuple)
class scala.Tuple2$mcII$sptuple: (Int, Int) = (4,5)
swap: (tuple: (Int, Int))(Int, Int)
res3: (Int, Int) = (5,4)
Exercise02
利用模式匹配,编写一个swap函数,交换数组中的前两个元素的位置,前提条件是数组长度至少为2
import scala.collection.mutable.ArrayBuffer
def swap(arr:Array[Any]):Array[Any]={arr match{case Array(x,y,res@_*) => Array(2,1)++res}
}
println(swap(Array(1,2,3,4,5)).mkString(" "))
println(swap(Array("a","b")).mkString(" "))
2 1 3 4 5
2 1import scala.collection.mutable.ArrayBuffer
swap: (arr: Array[Any])Array[Any]
Exercise03
编写一个函数,计算List[Option[Int]]中所有非None值之和。不得使用match语句
//getOrElse给了默认值0
def sum(lst: List[Option[Int]]) = lst.map(_.getOrElse(0)).sum
val x = List(Some(1), None, Some(2), None, Some(3))
println(sum(x))
6sum: (lst: List[Option[Int]])Int
x: List[Option[Int]] = List(Some(1), None, Some(2), None, Some(3))
Exercise04
编写函数values(fun:(Int)=>Int,low:Int,high:Int),该函数输出一个集合,对应给定区间内给定函数的输入和输出。比如,values(x=>x*x,-5,5)应该产出一个对偶的集合(-5,25),(-4,16),(-3,9),…,(5,25)
def square(x:Int):Int={x*x
}
def values(fun:(Int)=>Int,low:Int,high:Int)={var arr = Array[Any]()for(i <- low to high){arr = arr ++ Array((i,fun(i)))}arr
}
values(square,-5,5)
square: (x: Int)Int
values: (fun: Int => Int, low: Int, high: Int)Array[Any]
res121: Array[Any] = Array((-5,25), (-4,16), (-3,9), (-2,4), (-1,1), (0,0), (1,1), (2,4), (3,9), (4,16), (5,25))
Exercise05
如何用reduceLeft得到数组Array(1,333,4,6,4,4,9,32,6,9,0,2)中的最大元素?
val arr = Array(1,333,4,6,4,4,9,32,6,9,0,2)
def myMax(x:Int,y:Int)={if (x>=y) x else y
}
arr.reduceLeft(myMax)
arr: Array[Int] = Array(1, 333, 4, 6, 4, 4, 9, 32, 6, 9, 0, 2)
myMax: (x: Int, y: Int)Int
res122: Int = 333
Exercise06
用to和reduceLeft实现阶乘函数,不得使用循环或递归
def myFactorial(n:Int)={val multiply = (x:Int,y:Int)=>x*y(1 to n).reduceLeft(multiply)
}
myFactorial(5)
myFactorial: (n: Int)Int
res124: Int = 120
Exercise07
编写函数largest(fun:(Int)=>Int,inputs:Seq[Int]),输出在给定输入序列中给定函数的最大值。举例来说,largest(x=>10x-xx,1 to 10)应该返回25.不得使用循环或递归
def largest(fun:(Int)=>Int,inputs:Seq[Int])={val myMax=(x:Int,y:Int)=>Array(x,y).maxinputs.map(fun(_)).reduceLeft(myMax)
}largest(x=>10*x-x*x,1 to 10)
largest: (fun: Int => Int, inputs: Seq[Int])Int
res130: Int = 25
Exercise08
要得到一个序列的对偶很容易,比如:val pairs = (1 to 10) zip (11 to 20)
编写函数adjustToPair,该函数接受一个类型为(Int,Int)=>Int的函数作为参数,并返回一个等效的, 可以以对偶作为参数的函数。举例来说就是:adjustToPair(*)((6,7))应得到42。然后用这个函数通过map计算出各个对偶的元素之和
def adjustToPair(fun:(Int,Int)=>(Int))={(x:Tuple2[Int,Int])=>fun(x._1,x._2)
}
adjustToPair((x:Int,y:Int)=>x*y)((6,7))
adjustToPair: (fun: (Int, Int) => Int)((Int, Int)) => Int
res135: Int = 42
val pairs = (1 to 10) zip (11 to 20)
pairs.map(adjustToPair((x:Int,y:Int)=>x*y))
pairs: scala.collection.immutable.IndexedSeq[(Int, Int)] = Vector((1,11), (2,12), (3,13), (4,14), (5,15), (6,16), (7,17), (8,18), (9,19), (10,20))
res136: scala.collection.immutable.IndexedSeq[Int] = Vector(11, 24, 39, 56, 75, 96, 119, 144, 171, 200)
2020-03-19 于南京市区栖霞区
ScalaNote24-模式匹配和高阶函数练习题相关推荐
- python六十四课——高阶函数练习题(一)
1.lt = ['sdfasdfa', 'ewqrewrewqr', 'dsafa12312fdsafd', 'safsadf'] --> 得到长度列表2.tp = ('TOM', 'Lilei ...
- python之路--嵌套函数、匿名函数、高阶函数。函数的递归
嵌套函数 函数里不仅可以写代码,还可以嵌套函数 name = "小猿圈"def change():name = "小猿圈,自学编程"def change2(): ...
- python基础十 函数(下)匿名函数、高阶函数、闭包、装饰器
目录 1. 匿名函数(lambda表达式) 2. 高阶函数 3. 函数的嵌套 4. nonlocal 关键字使用 5. 闭包 6. 装饰器 1. 匿名函数(lambda表达式) 简介 用一句话来表达只 ...
- Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法
函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...
- 2021年大数据常用语言Scala(三十七):scala高级用法 高阶函数用法
目录 高阶函数用法 作为值的函数 匿名函数 柯里化(多参数列表) 闭包 高阶函数用法 Scala 混合了面向对象和函数式的特性,在函数式编程语言中,函数是"头等公民",它和Int. ...
- Koltin 高阶函数
高阶函数 高阶函数是将函数用作参数或返回值的函数. 在java中函数和方法是同一个概念, 我就把高阶函数理解为:高阶函数是将方法用作参数或返回值的方法, java中我们要调用方法里面的参数一般需要实现 ...
- 函数 tostring_Kotlin实战之Fuel的高阶函数
Fuel 是一个用 Kotlin 写的网络库,与 OkHttp 相比较,它的代码结构比较简单,但是它的巧妙之处在于充分利用了 Kotlin 的语言特性,所以代码看上去干净利落. OkHttp 使用了一 ...
- 【廖雪峰Python学习笔记】高阶函数
Higher-order function 高阶函数 映射 过滤算法 排序算法 高阶函数 变量可指向函数 >>> abs # 函数 <built-in function abs ...
- Python高阶函数使用总结!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:皮钱超,厦门大学,Datawhale原创作者 本文约2000字,建 ...
最新文章
- inet_pton和inet_ntop函数
- 网页打印javascript:window.print()
- ETC2 区别于ETC的重要点
- css flex排序居中
- Ubuntu Linux配置IP地址
- python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一
- 通过高速计算机网络和多媒体,全国2014.10办公自动化原理及应用试题
- 蓝桥杯国赛之阶乘位数
- maple软件安装教程
- 读《About Face 4 交互设计精髓》16
- ArcGIS学习总结(12)——拓扑检查和修正
- xmlspy2014 安装与破解
- PAT甲级 1125
- cimiss java,cimis
- 电脑技巧:Win10操作系统关闭这几个功能,可以大幅度提升电脑的运行速度
- 计算机专硕一般研二在干嘛,专硕一般研二在干嘛,专硕两年怎么安排
- [附源码]java毕业设计高校学生疫情防控信息管理系统
- Navicat导入Excel提示无法打开Excel文件
- python标准库复数运算包cmath
- 关于华擎J3455安装虚拟机PVE和ESXI还有作为纯物理黑群晖的一些事宜
热门文章
- 从0配置halo博客并配置SSL
- 用顺序表求集合的交集、并集和差集
- 基于php的乐山旅游攻略网站
- Winform UI界面设计例程——TreeView控件
- 2020年全球高被引科学家名单出炉!内地770人上榜
- 女软件工程师的征友PPT
- 安装完Ubuntu 16.04之后要做的一些事
- 【opencl】——AMD APP SDK下载地址
- 硕士论文评阅意见的模板参考
- writeline是什么意思_write是什么意思_write的翻译_音标_读音_用法_例句_爱词霸在线词典...