随堂笔记--
object sumfunc { def sum(f:Int => Int)(a:Int)(b:Int):Int = { @annotation.tailrec def loop(n:Int, acc:Int): Int={ if (n>b){ println(s"n=${n}, acc=${acc}") acc } else{ println(s"n=${n}, acc=${acc}") loop(n+1, acc+f(n)) } } loop(a,0) } sum(x => x)(1)(5) sum(x => x*x)(1)(5) sum(x => x*x*x)(1)(5) val sumSquare = sum(x => x*x)_ sumSquare(1)(5)
def sum(f: Int => Int)(a: Int)(b: Int): Int = {
@annotation.tailrec
def loop(n: Int, acc: Int): Int = {
if (n < a) {
println(s"n=${n},acc=${acc}")
acc
} else {
println(s"n=${n},acc=${acc}")
loop(n - 1, acc + f(n))
}
}
loop(b, 0)
} //> sum: (f: Int => Int)(a: Int)(b: Int)Int
sum(x => x)(1)(5) //> n=5,acc=0
//| n=4,acc=5
//| n=3,acc=9
//| n=2,acc=12
//| n=1,acc=14
//| n=0,acc=15
//| res0: Int = 15
sum(x => x * x)(1)(5) //> n=5,acc=0
//| n=4,acc=25
//| n=3,acc=41
//| n=2,acc=50
//| n=1,acc=54
//| n=0,acc=55
//| res1: Int = 55
def sum2(f: Int => Int)(a: Int)(b: Int): Int = {
@annotation.tailrec
def loop(n: Int, acc: Int): Int = {
if (n > b) {
println(s"n=${n},acc=${acc}")
acc
} else {
println(s"n=${n},acc=${acc}")
loop(n + 1, acc + f(n))
}
}
loop(a, 0)
} //> sum2: (f: Int => Int)(a: Int)(b: Int)Int
sum2(x => x)(1)(5) //> n=1,acc=0
//| n=2,acc=1
//| n=3,acc=3
//| n=4,acc=6
//| n=5,acc=10
//| n=6,acc=15
//| res2: Int = 15
sum2(x => x * x)(1)(5) //> n=1,acc=0
//| n=2,acc=1
//| n=3,acc=5
//| n=4,acc=14
//| n=5,acc=30
//| n=6,acc=55
//| res3: Int = 55
灵活的Scala
柯里化
偏应用函数
奋斗奋斗舒服的萨法的萨法
求函数F的积分的例子
通过通用的,泛化的函数定义来生成一些比较具体的函数,从而提高了代码的抽象性,简化了特殊性
柯里化函数实现f(x)函数值求和
求f(x) (x范围是a到b)的函数的和
尾递归函数