CSE341函数编程
文章平均质量分 79
圆形毕露
技术热爱者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
声明
本系列来自UW的CSE341系列,是很有趣的函数式编程入门。无论你是否打算使用函数式语言,学习了解它都是可以开拓思路的~推荐CSE341: Programming Languages, Winter 2013原创 2017-05-25 13:27:08 · 341 阅读 · 0 评论 -
[static FL]part1:基本概念
函数式语言:F#是ML的一个变种,在.net平台上运行; 其他的还有Haskell, OCamlML:static functional language函数编程:1. immutable data; 2. function as valueML是一系列的binding,如果一个binding type-checked(类型检查通过)就evaluate(求值)binding的类原创 2017-05-25 13:59:26 · 517 阅读 · 0 评论 -
[static FL]part2: binding
variable binding: val x = eval: keywordx: variablee: expressionv: value(不需要做多余计算的表达式)t: typefunction binding: fun x0(x1: t1, x2: t2...) = e typing: static environment o原创 2017-05-25 14:28:44 · 490 阅读 · 0 评论 -
[static FL]part4: expression
let expression: let b1, b2... in e end bi是biding 定义局部变量 scope of binding: 在let中定义了该binding之后,以及e中都可以使用这个binding let的类型就是e的类型 inner binding shadow outer ones let 也可以原创 2017-05-25 14:30:07 · 311 阅读 · 0 评论 -
[static FL]part3: type
pair type: (e1, e2) typing: t1*t2, t1,t2分别是e1和e2的值 取值:#1, #2 可以nest,但是只能有两项tuple type:(e1, e2...) 类似pair,本质是record 和record(by name)比,是by position, 顺序是有意义的 语法糖原创 2017-05-25 14:29:34 · 346 阅读 · 0 评论 -
[dynamic FL]part 5:基本概念
Racket: 动态语言,而非静态Racket和Scheme同源,来自LISP。可以讲任何类型的数据放在任何相仿的地方Racket由一组definition组成,括号用来求值e并调用函数。 括号内可以有atom: 包含特定值,变量和关键字(define lambda if)。 所有的东西都是前缀形式,如2+3=>(+ 2 3)(t1 t2 …):如果t1原创 2017-05-25 14:42:46 · 578 阅读 · 0 评论 -
[dynamic FL]part 6:comparison between Dynamic and Static
各种语言的比较:Dynamic type language VS Static type language: Dynamic看待Static: ML好像只是Racket的子集。ML会拒绝更多程序, 可能有bug的也可能是没有bug的。 Static看待Dynamic: Racket好像只是ML的子集,所有的表达式都属于某一个大的数据类型,并且有很多子类型,这些类型有类似原创 2017-05-25 14:45:09 · 475 阅读 · 0 评论 -
[OOL]part 7: 基本概念
纯面向对象语言: Ruby1.纯面向对象语言:所有的值都是对象2.class-based: 对象都是类的实例3.mixin4.dynamically typed5.reflection6.有blocks和closures7.是scripting language: 写小程序,性能相对差duck typing: If it walks like a d原创 2017-05-25 14:48:13 · 694 阅读 · 0 评论 -
part 8: comparison between OOL and FL
OOP和函数编程的区别表格:行是operation,列是variant函数编程: 每个operation都是一个函数,每个函数都有若干branch,每个branch都对应一个variant 定义datatype,每个variant都对应一个constructor面向对象编程: 定义一个基类,每个operation是一个类函数,基类中的函数是抽原创 2017-05-25 14:51:16 · 588 阅读 · 0 评论
分享