每天学点Scala 2

一下内容是作者学习scala公开课的学习笔记内容,此课程有scala创始人讲授

https://class.coursera.org/progfun-004/lecture



第二部分的函数式作为参数传递和返回,以及加酯法,看了3便,理解了好久才找到门道,原来一切都如高中时候数学课的函数那般,如此理解就变得简单了好多。只从面向过程和面向对象的角度来考虑还是有些局限的,反而是大学以来的编程学习让自己忘记了什么是函数啊。

比如从数学的角度看下面的式子:

f(x) = x^2 + x + 1

g(x) = logX 

z(x) = x + 1/x   // x != 0

z(g(f(x))) = g(x) + 1/g(x) = log(f(x)) + 1/log(f(x)) = .......


所谓函数式编程就是说, 我定义了g(x), z(x), 然后f(x)你可以灵活掌握,把你需要的f(x),带入到g(x), z(x)的式子中。


============================================================================================================================

High Order Functions












上面的内容主要需要了解2个方面:函数式编程的含义,含义通过求和的函数讲的非常透彻,以及传递函数作为参数的书写格式


Currying













上面最开始,内嵌了一个sumF的函数,然后这个函数作为结果返回,这个例子很清楚的表达了函数作为传入参数和返回结果的情况。那么为什么要引出下面的currying呢,考虑到函数的多层嵌套,或者说函数的扩张,如果采用上一节中的方式写成: sum(f:Int=>Int, a: Int, b: Int),如果写成这种形式,是无法做到多层函数的嵌套的,这也就是为什么要像这一节中这样书写的目的。


Finding Fixed Point






上面的例子中给我印象最深的是 sqrt(x) = fixedPoint(y => x/y)(1.0) 的这个调用过程。仔细看了这里才发现,原来sqrt中的参数x,在后面计算中并不是放在传统函数中x的位置的,而是作为了fixePoint函数的一个已知常量一样的东西存在着,而且fixPoint函数自己引入了一个新的参数Y。这一点需要特别注意,这里已经不是那种非常简单的函数嵌套了。当然如果写成这样 fixedPoint((x:Int, y:int)=>x/y)(x, 1.0), 也许更好理解一些。但是很明显上面的写法更加简洁。


Syntax Summary











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值