书到用时方恨少,很多函数还是不熟悉啊!!!

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-模式匹配和高阶函数练习题相关推荐

  1. python六十四课——高阶函数练习题(一)

    1.lt = ['sdfasdfa', 'ewqrewrewqr', 'dsafa12312fdsafd', 'safsadf'] --> 得到长度列表2.tp = ('TOM', 'Lilei ...

  2. python之路--嵌套函数、匿名函数、高阶函数。函数的递归

    嵌套函数 函数里不仅可以写代码,还可以嵌套函数 name = "小猿圈"def change():name = "小猿圈,自学编程"def change2(): ...

  3. python基础十 函数(下)匿名函数、高阶函数、闭包、装饰器

    目录 1. 匿名函数(lambda表达式) 2. 高阶函数 3. 函数的嵌套 4. nonlocal 关键字使用 5. 闭包 6. 装饰器 1. 匿名函数(lambda表达式) 简介 用一句话来表达只 ...

  4. Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法

    函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...

  5. 2021年大数据常用语言Scala(三十七):scala高级用法 高阶函数用法

    目录 高阶函数用法 作为值的函数 匿名函数 柯里化(多参数列表) 闭包 高阶函数用法 Scala 混合了面向对象和函数式的特性,在函数式编程语言中,函数是"头等公民",它和Int. ...

  6. Koltin 高阶函数

    高阶函数 高阶函数是将函数用作参数或返回值的函数. 在java中函数和方法是同一个概念, 我就把高阶函数理解为:高阶函数是将方法用作参数或返回值的方法, java中我们要调用方法里面的参数一般需要实现 ...

  7. 函数 tostring_Kotlin实战之Fuel的高阶函数

    Fuel 是一个用 Kotlin 写的网络库,与 OkHttp 相比较,它的代码结构比较简单,但是它的巧妙之处在于充分利用了 Kotlin 的语言特性,所以代码看上去干净利落. OkHttp 使用了一 ...

  8. 【廖雪峰Python学习笔记】高阶函数

    Higher-order function 高阶函数 映射 过滤算法 排序算法 高阶函数 变量可指向函数 >>> abs # 函数 <built-in function abs ...

  9. Python高阶函数使用总结!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:皮钱超,厦门大学,Datawhale原创作者 本文约2000字,建 ...

最新文章

  1. inet_pton和inet_ntop函数
  2. 网页打印javascript:window.print()
  3. ETC2 区别于ETC的重要点
  4. css flex排序居中
  5. Ubuntu Linux配置IP地址
  6. python爬虫知乎图片_Python爬虫入门教程 25-100 知乎文章图片爬取器之一
  7. 通过高速计算机网络和多媒体,全国2014.10办公自动化原理及应用试题
  8. 蓝桥杯国赛之阶乘位数
  9. maple软件安装教程
  10. 读《About Face 4 交互设计精髓》16
  11. ArcGIS学习总结(12)——拓扑检查和修正
  12. xmlspy2014 安装与破解
  13. PAT甲级 1125
  14. cimiss java,cimis
  15. 电脑技巧:Win10操作系统关闭这几个功能,可以大幅度提升电脑的运行速度
  16. 计算机专硕一般研二在干嘛,专硕一般研二在干嘛,专硕两年怎么安排
  17. [附源码]java毕业设计高校学生疫情防控信息管理系统
  18. Navicat导入Excel提示无法打开Excel文件
  19. python标准库复数运算包cmath
  20. 关于华擎J3455安装虚拟机PVE和ESXI还有作为纯物理黑群晖的一些事宜

热门文章

  1. 从0配置halo博客并配置SSL
  2. 用顺序表求集合的交集、并集和差集
  3. 基于php的乐山旅游攻略网站
  4. Winform UI界面设计例程——TreeView控件
  5. 2020年全球高被引科学家名单出炉!内地770人上榜
  6. 女软件工程师的征友PPT
  7. 安装完Ubuntu 16.04之后要做的一些事
  8. 【opencl】——AMD APP SDK下载地址
  9. 硕士论文评阅意见的模板参考
  10. writeline是什么意思_write是什么意思_write的翻译_音标_读音_用法_例句_爱词霸在线词典...