Scala函数式编程笔记

时间: | 分类: scala

引用透明、纯粹度以及代换模型

《Scala函数式编程》笔记

引用透明

要求函数不论进行了任何操作都可以用它的返回值来替代 代换模型

An expression is said to be referentially transparent if it can be replaced with its corresponding value without changing the program's behavior. As a result, evaluating a referentially transparent function gives the same value for same arguments. Such functions are called pure functions.

如果一个函数的输入相同,对应的计算结果也相同,那么它就具备 引用透明性 ,可被称为 纯函数

引用透明是的程序具备了 等式推理 的能力

尾调用

尾调用指的是调用者在一个递归调用后不做其他事,只是返回这个调用结果

如果递归调用是在一个函数的尾部,Scala会自动把递归便以为循环迭代,这样不会每次都进行栈的操作,通过tailrec注释,如果变异不能消除尾部调用会给出编译错误

def factorial(n:Int):Int= {
    @annotation.tailrec
    def go(n:Int,acc:Int):Int=
        if (n<=0) acc
        else go(n-1,n*acc)
    go(n,1)
}

多态函数:基于类型的抽象

def findFirst[A](as:Array[A],p:A=>Boolean):Int={
    @annotation.tailrec
    def loop(n:Int):Int=
        if (n>=as.length) -1 
        else if (p(as(n))) n
        else loop(n+1)
        
    loop(0)
}

通过类型来实现多态

def partiall[A,B,C](a:A,f:(A,B)=>C):B=>C

函数partiall有三个类型参数,它带有两个参数,参数f本身是一个有两个类型分别为A和B的参数,返回值为C的函数。函数partiall的返回值也是一个函数,类型为B=>C

定义函数式数据结构

函数式数据结构被定义为不可变的


Scala Scala入门 scala函数式编程



失学失业还秃头


文章归档