码迷,mamicode.com
首页 > 其他好文 > 详细

Functional Programming Principles in ScalaScala函式编程原理 第一章笔记

时间:2014-08-09 02:33:10      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:io   strong   ar   cti   res   ad   ef   编程   

所有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的好处是如果一个参数没用,那么它不会被计算

Functional Programming Principles in ScalaScala函式编程原理 第一章笔记,布布扣,bubuko.com

Functional Programming Principles in ScalaScala函式编程原理 第一章笔记

标签:io   strong   ar   cti   res   ad   ef   编程   

原文地址:http://www.cnblogs.com/woaishizhan/p/3900424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!