首页 > 代码库 > Functional Programming Principles in ScalaScala函式编程原理 第一章笔记
Functional Programming Principles in ScalaScala函式编程原理 第一章笔记
所有non-trival编程语言都提供了
- 基本表达式(expression)去表示最简单的表达式
- 组合表达式的方法
- 抽象表达式的方法,也就是为表达式引入一个名字去引用它
substitional model 替代模型
sumOfSquares(3,2+2)
sumOfSquares(3,4)
square(3)+square(4)
9+square(4)
9+16
25
这种模型的核心概念是所有的表达式都规约成值,替代模型在lamada表达式中被形式化,构成了函数式编程的基石
substitional model只能被用于对没有side effect的表达式求值
side effect比如表达式 a++
每个表达式都能在有限步内规约成一个值吗?
答案是不行!
def loop:int = loop
当调用loop的时候发生
loop->loop->loop->loop->........
再看另一种求值方法
sumOfSquare(3,2+2)
Square(3)+Square(2+2)
3*3+Square(2+2)
9+(2+2)*(2+2) //这里参数被计算了多次
9+4*(2+2)
9+4*4
9+16
25
第一种叫call-by-value,第二种叫call-by-name
对于一个表达式这两种方式会规约成同一个值,只要保证
- 被规约的式子包含pure functions,并且每个求值过程都是可终止(有限)的
call-by-value的好处是每个函数的参数只被计算一次,call-by-name的好处是如果一个参数没用,那么它不会被计算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。