7.1 函数式数据结构
用函数编程,程序处理的数据总是保存在数据结构中。数据结构和对象之间的区别在于,数据结构公开了表示数据(从名字就可以知道) 的结构;知道了数据的结构便于写处理的代码,但要到第九章才讨论,F# 还提供了一种封装结构的方法,如同面向对象编程,当我们想从库中导出 F# 数据结构,或者用于 C#。正如我们在第二章讨论函数概念时所说的,这些数据结构是不可变的。
在这一章,我们...
分类:
其他好文 时间:
2014-11-21 16:16:27
阅读次数:
131
第七章 以数据为中心的程序设计
本章介绍
■ 表示和处理文档
■ 设计不可变数据结构
■ 数据表示形式之间的转换
■ 使用记录和递归差别联合
在设计函数式程序时,首先要考虑的是程序处理的数据;由于重要的程序都使用数据,因此,在应用程序设计中,这个方面极为重要。用函数语言实现程序,我们也是从设计在代码中用到的数据结构开始;下一步才会写处理数据的运算。
但是不同于面向对象的设...
分类:
其他好文 时间:
2014-11-21 12:45:10
阅读次数:
157
C++中函数的为函数灵活使用提供的语言和库特性...
分类:
编程语言 时间:
2014-11-21 12:38:09
阅读次数:
256
6.8.2 列表的绑定操作
我们只讨论了选项值的绑定(bind)操作,实际上,它是非常重要的函数式操作,我们将在第十二章介绍。清单 6.26 显示了对选项值绑定操作的类型签名,以及如果我们定义列表的绑定操作,它的类型签名。
清单 6.26 绑定操作的签名 (F#)
Option.bind : ('a -> 'b option) -> 'aoption -> 'b option
...
分类:
其他好文 时间:
2014-11-20 15:24:53
阅读次数:
161
最近由于项目需要,刚刚学完了Action委托和Func委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利、才能使代码更加简介、优雅。Lambda表达式"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda.....
6.8.1 映射、筛选和折叠(Mapping,filtering, and folding)
映射、筛选和折叠是函数编程中最常见的操作;在处理函数式列表时,我们已经用到过,但它们还支持所有其他的集合类型(我们将在第十和十二章讨论其中一部分);这些操作并不限于集合,所有的操作都可用于处理选项类型。
清单 6.25 显示了映射、筛选和折叠函数的签名类型,清单中包括了我们尚未讨论过的Optio...
分类:
移动开发 时间:
2014-11-20 12:09:11
阅读次数:
183
诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang、clojure、Scala、F#等等。目前最当红的Python、Ruby、Javascript,对函数式编程的支持...
分类:
其他好文 时间:
2014-11-19 15:44:51
阅读次数:
279
6.7 处理列表
在第三章,我们讨论过列表,学习了显式使用递归和模式匹配处理列表,还用 C# 实现了函数式列表类型;第 4 章的示例应用程序就以这种方式使用列表,但是要注意,显式写列表处理并不实用。
在这一章,将用到递归模式,因此,你可能已经知道我们下一步要讨论什么了。我们可以使用高阶函数来处理列表,而不必显式使用模式匹配的每种情况;我们已经看到过一些处理 F# 列表的函数,比如 Lis...
分类:
其他好文 时间:
2014-11-18 14:48:35
阅读次数:
171
版本
本文翻译自Clojure Namespaces and Vars 本文涵盖如下内容:
+ Clojure命名空间和var概述 + 如何定义命名空间 + 如何使用其它命名空间里的函数 + require,refer和use + 常见错误和典型错误,以及导致这些错误的原因 + 命名空间和代码管理
版权:
This work is licensed under a Creativ...
分类:
其他好文 时间:
2014-11-16 23:08:06
阅读次数:
363