当前位置:
文档之家› 函数式编程(Loveice)
函数式编程(Loveice)
图灵机和Lambda演算?
• 有点“高深”,今天不讲这个==
(欢迎自行脑补)
程序的挑战
• • • • 面对对规模和复杂性? 降低开发和维护的费用? 保证软件正确性? 并行化的时代?
应对复杂性——模块化
• 面向对象? 封装——实现了模块化,代码重用 耦合——继承/组合,都不利于模块化• 函数式ຫໍສະໝຸດ 数学——基础函数的组合谢谢
rainoftime@
体验一下
• Haskell
[1, 3 ..] 表示所有奇数(没错,这是代码)
[x | x <- [1, 3 ..], x< 9] 选出小于9的奇数(没错,这还是代码)
函数式语言
• • • • • Haskell Ocaml Erlang Lisp .......
Erlang开源项目
• • • • • OTP - Erlang自带 RabbitMQ - 消息中间件 CouchDB - 文档数据库 Chicago Boss - Web框架 。。。
函数式编程 Functional Programming
Loveice 华中科技大学Linux协会
函数式编程
• • • • 命令式: Pascal, C.. 面向对象: Java, C++ 逻辑式: Prolog.. 函数式: Haskell, Ocaml, Erlang, Lisp...
没有严格界限,比如Ocaml就有面向对象特 点
效率-开发/运行/维护
• 开发 Clojure之父的例子 • 运行
• 维护
并行化
• 声明式 VS 命令式
• 变量绑定 VS 变量可变
正确性
• 数学直观: 函数式程序为表达式/函数的组合,和数学 的很多概念对应,方便验证
• 应对错误: 时间有限== 以后再看
函数式的特性
• • • • • • • • 垃圾回收(Lisp首先实现) “变量”不可变 高阶函数 匿名函数 函数克里化(currying) 惰性求值 列表推导 .....
工程的应用
• • • • Erlang Scala Ocaml Haskell - facebook, Taobo, xiaomi - Twitter - Jane Street - 渣打银行...
影响其他语言
支持(部分)函数式特性的主流语言 • JavaScript • Python • Ruby • C++ 11 • C#