-
尾递归函数
尾递归函数(Tail Recursive Function)中所有递归形式的调用都出现在函数的未尾。
当编译器检测到一个函数调用是尾递归的时候,它就覆盖当前的活动记录而不是在栈中去创建一个新的。查看全部 -
注意尾递归函数的写法,loop 函数定义了两个参数表示区间变量和累加和,这是关键。另外,f(x)函数用匿名推导来定义,灵活的推广到二阶和三阶求和。查看全部
-
# 函数式编程
> 命令式编程在理论上上升到语言学的层次,不可判定的问题很多,且为了实用引人更多的模糊地带,是不够严密的。而函数式编程关心语义,从数理逻辑出发建立基础,例如三大语义,泛代数,可靠性完备性,合流,规约等概念,体系上更严密。而且视公理化为头等大事。 - https://www.zhihu.com/question/36782552
- 函数式编程是一种编程范式
## 范式(Paradigm)
- 范式包括 philosophy (理念) 和 methods (方法)两部分
1. 某事的 philosophy (理念) 就是,做某事,什么该做,什么不该做,以及方式
2. Methods (方法)就是继方式之后的具体的操作
## 函数式编程没有副作用
> 副作用指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
```scala
var x=1
def XPlusY_v1(y: Int)=x+y
def XPlusY_v2(y: Int)={x+y;x} //有副作用,改变了x的值
```
## 函数式编程引用透明
- 对于相同的输入,总是得到相同的输出
- 如果f(x)的参数x和函数体都是透明的,那么函数f(x)是纯函数
```scala
var x = new StringBulider("Hello")
var y = x.append(" World!") //Hello World!
var z = x.append(" World!") //Hello World! World!
// appned 方法违反了引用透明性
```
### 不变性 Immutability
- 为了获得引用透明性,任何值都不能变
## 表达式求值
1. 严格求值 call by value
2. 非严格求值 call by name
查看全部 -
try catch finally 跟Java差不多 只不过catch这里是个表达式
code match 类似switch
查看全部 -
if条件判断 没有设置值默认{}
for循环 s <- l 赋值 yield配合变量将新的值打印出来
查看全部 -
Scala的函数可以足够聪明知道函数的返回值类型 Scala的函数简单的一行表达式不需要函数括号
查看全部 -
底精度变量可以直接向高精度变量转换
Unit 表示无值,和其他语言中void等同,用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。函数出错会返回Nothing。
函数定义
def main(args: Array[String]): Unit = {}
字符串占位符:
var e = "bob"; println(s"your name is ${e}")
查看全部 -
三种变量修饰符 val 定义常量,不可修改 var 定义变量 lazy val 只要第一次使用到时候,才会运算表达式得到值 可以不显示指定变量的类型,因为Scala会自动进行类型推导
查看全部 -
Scala里有两种求值策略(Evaluation Strategy) Call By Value - 对函数实参求值,且仅求值一次 Call By Name - 函数实参每次在函数体内被用到时都会求值
查看全部 -
try 在Scala里面不是一个语句,而是一个表达式
查看全部 -
Scala的for循环和Java的有很大差异,但基本原理是一致的。
查看全部 -
1. 在Scala IDE中有一个很便捷的功能,那就是WorkSheet 它类似于交互式命令行的代码测试,在Worksheet输入scala表达式,保存以后会立即得到程序运行的结果 2. Scala的函数可以足够聪明知道函数的返回值类型 3. Scala的函数简单的一行表达式不需要函数括号
查看全部 -
底精度变量可以直接向高精度变量转换
Unit 表示无值,和其他语言中void等同,用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。函数出错会返回Nothing。
查看全部 -
三种变量修饰符 val 定义常量,不可修改 var 定义变量 lazy val 只要第一次使用到时候,才会运算表达式得到值 可以不显示指定变量的类型,因为Scala会自动进行类型推导
查看全部 -
Install Java JDK Download Scala Install SBT REPL (Read Evaluate Print Loop) Install Scala IDE
查看全部
举报