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

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

时间: 2024-10-03 20:42:49

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

Coursera公开课Functional Programming Principles in Scala习题解答:Week 2

引言 OK.时间很快又过去了一周,第一周有五一假期所以感觉时间绰绰有余,这周中间没有假期只能靠晚上加周末的时间来消化,其实还是有点紧张呢!后来发现每堂课的视频还有对应的课件(Slide).字幕(subtitles)可以下载,这样下载视频学习和在线学习就只差课程中间的Exercise了 Week 2主要讲函数,函数在Scala里是first-class citizen,可以在任意域内出现,这门课其实也是在借Scala来讲函数式编程原理.好了,不多说,进入习题解析. 这周的作业主要是使用函数来表示一

Coursera公开课Functional Programming Principles in Scala习题解答:Week 3

引言 这周的作业其实有点复杂,需要完成的代码有点多,有点绕.本周的课程主要讲了Scala中的类.继承和多态,作业也很好的从各个方面考察了课程的内容.作业题目工程主要需要完成的部分是TweetSet.scala这个文件中的内容,比较新潮,都是和推特相关.其中定义了一个抽象类TweetSet,以及其的两个子类Empty.NonEmpty,表示空集和非空集.非空集使用二叉树来表示,二叉树的根是一个Tweet类对象,表示一条推特(用天朝的话来说叫做"微博"),一条微博哦不,一条推特包含user

Coursera公开课Functional Programming Principles in Scala习题解答:Week 1

引言 工作之余参加了Coursera的公开课Functional Programming Principles in Scala,这个课是第三次开讲了,讲师仍然是Scala的祖师爷Martin Odersky先生.个人认为学习公开课最大的阻碍在于有些老师的口音实在是--不忍直视,比如最早在Coursera开授公开课的Andrew Ng(当然他现在是小老板了).幸好Martin大爷的英文口音不是很重,而且课程也不是很难,大家有兴趣可以去学习一下,地址在这里:https://class.course

Apply Functional Programming Principles

Apply Functional Programming Principles Edward Garson FUNCTiONAL PROGRAMMiNG has recently enjoyed renewed interest from the mainstream programming community. Part of the reason is because emergent properties of the functional paradigm are well positi

高大上函数响应式编程框架ReactiveCocoa学习笔记1 简介

原创文章,转载请声明出处哈. ReactiveCocoa函数响应式编程 一.简介 ReactiveCocoa(其简称为RAC)是函数响应式编程框架.RAC具有函数式编程和响应式编程的特性.它主要吸取了.Net的 Reactive Extensions的设计和实现. 函数式编程 (Functional Programming) 函数式编程也可以写N篇,它是完全不同于OO的编程模式,这里主要讲一下这个框架使用到的函数式思想. 1) 高阶函数:在函数式编程中,把函数当参数来回传递,而这个,说成术语,我

函数响应式编程及ReactiveObjC学习笔记 (-)

最近无意间看到一个视频讲的ReactiveObjC, 觉得挺好用的 但听完后只是了解个大概. 在网上找了些文章, 有的写的比较易懂但看完还是没觉得自己能比较好的使用RAC, 有的甚至让我看不下去 这两天刚好公司项目交付闲下来, 想自己去啃下官方文档 ReactiveCocoa是一个基于函数响应式编程的OC框架. 那么什么是函数式响应式编程呢?概念我就不讲了 因为我讲的也不一定准确, 大家可以去baidu看看大神们的解释 下面我大概演示下响应式编程的样子 Masonry是比较常见的一个响应式框架,

JavaScript DOM编程艺术第一章:JavaScript简史

本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助,所以 如果您也看过这本书,希望不要喷小的"抄袭",其实我也懒得敲这些文字也想简单粗暴地上代码,但是只有实践没有理论不容易自己理解,为避免误导,该"抄"的地方还是要"抄"的,哈哈~~ 一.JavaScript的起源 JavaScript是Netscap

&lt;java编程思想&gt;第一章读书笔记二

7.伴随多态的可互换对象 前面说了继承,我们知道继承中存在基类(父类)以及导出类(子类),不知道大家有没有遇到过这种情况?就是在向一个方法中传递一个对象作为参数时,我们往往会选择传递一个基类而不是一个子类,为什么要这么做呢?其实原因也很简单,说的高大上一点就是这样做有利于代码的健壮性和可扩展性,说的详细还是有利于代码的健壮性和可扩展性,更重要的也就是可扩展性. 还拿喝可乐的例子来说,如果你传递的参数对象是可乐,那么不管你是给我百事可乐还是可口可乐我都可以接受啊,但是如果你传递的参数仅仅是百事可乐

函数响应式编程及ReactiveObjC学习笔记 (二)

之前我们初步认识了RAC的设计思路跟实现方式, 现在我们再来看看如果使用它以及它能帮我们做什么 One of the major advantages of RAC is that it provides a single, unified approach to dealing with asynchronous behaviors, including delegate methods, callback blocks, target-action mechanisms, notificat