序
本书不同于现在的其他编程书籍,它不仅关注某种专门的编程语言或库,而是用目前用目前的编程语言或库去解释思维的方法。思维方法正变得越来越重要,已经重叠许多新的技术。
我们已经知道本书中描述的某些概念,因为,函数式思想在许多技术中都有所体现。.NET 的示例包括C# 3.0 和LINQ 项目,微软对 .NET 的并行扩展(Microsoft Parallel Extensions to .NET),以及在 WindowsPresentation Foundation(WPF)中使用的声明式编程模型。在本书中,我们将以已有的 .NET 和 C# 经验为基础,来解释函数式编程范式,将介绍 F#,这是微软新的函数式编程语言,用它来把抽象的思想转换成更具体的形式;在可能的地方我们也使用 C#,因为函数式思想也有助于设计出好的 C# 应用程序。的能是身姿 盗劫tation Foundation (WPF).
如果我写的书是纯粹介绍 F# 的,那么,我会按照各个语言功能来组织,并逐个解释这些功能。而本书是一般意义上的函数式编程,因此,在构成函数范式的思想上是松散的结构,但这也更困难,因为,思想没有清晰的边界,且常有重叠。
我们已经尝试过,选择一些我们认为对于函数式编程的新手来说是最重的思想,然后,围绕这些来组织内容,这一点在第二部分特别重要,我们将系统介绍函数值,高阶函数,以及函数程序的体系结构。这样,示例能够很快用来演示函数式编程,比如数据集合的使用,它不止出现在一个地方,相反,我们介绍的每一种思想,会在后面的章节中多次出现。因此,我们使用这种方法来展示如何从一组很小的概念出发产生出优美的函数式编程思想,就像函数程序自己做的一样。
感谢
“蝴蝶效应(butterfly effect)”,是由Edward Lorenz 提出的一个概念,是基于混沌理论:是说表面上看来很小的事件有可能引起很大的事件,比如,蝴蝶在亚洲的某个地方轻轻扇了几下翅膀,就可能引起南美洲的飓风。(蝴蝶扇动翅膀在理论上是恒定的,但是地点(亚洲或巴西)和结果(飓风或龙卷风)却会不同)。这足以说明,正是由于有这许多人(和蝴蝶),才有可能有了这本书,如果没有他们,就不会有这本书;因此,即使我不相信混沌理论,但是,在这一节中我要感谢的人还是很多的。
如果我没有遇到Don Syme,可能永远不会对 F# 和函数式编程感兴起。Don 是我在微软研究院的实习导师,和他在一起工作,并参加长期有关 F#(以及生活、宇宙和其他的一切)的讨论是一件很愉快的事情;还要感谢的是微软研究院的James Margetson,它教会了我许多很酷的函数编程技巧。然而,如果我不是获得微软 MVP,并且遇到了Luke Hoban,他后来把我介绍给了Don,那么,可能永远也遇不到Don 和 James。如果我必须继续像这样,那么,最后还要感谢Michal Bláha, Jan Stoklasa、Božena Mannová、CodeProject.com的作者,以及其他许多人。
没有Mike Stephens,就不会有这本书,他是Manning 公司最先与我接触的;由于Harry Pierson 的最先参与,我才着手写作。虽然我们在一起的时间不长,但是,Harry 的参与对的鼓励非常重要。
前面,我提到的人对本书的着手创作起的很大的作用,下面要感谢的人对本书的完成至关重要。
我要非常感谢我的合作者Jon,在从初稿到成书的过程中对我的帮助。如果你感到本书就好像是为你写的,那么,还是要感谢 Jon,因为他仔细地为读者把书中的每一项都调整到适当的形式。最后,Jon 是一个很好相处的人,他会很乐意与你本书的问题,不论是在线,还是面谈。
这里,我还要感谢Manning 公司中每一个对本书的帮助。
(略……)
当然,我还要感谢我的朋友和我的家庭,对于不认识他们的人来说,他们的问题“你的书啥时候能完成?”,听起来可能不特别入耳,但我知道他们是为我好,我真诚地感激他们的鼓励。最后,特别要感谢的是我最亲爱的Evelina,她不仅在道义上对我给予了极大的支持,而且还阅读了大部分书稿,并进行了评论。我权elina,就像我对计算的
TOMAS PETRICEK
我首选要感谢 Tomas 和Manning 公司的每个人,给予我参与本书部分工作的机会。对于一个宏大目标来说,这是一个很小的部分,但非常有趣,它给了我学习有关函数式编程的乐趣,从书本到书本。我只希望我所做的这一小部分能有用,我所代表的是热情而无知的读者(当然包括 C# 粉),因此,你现在读到的本书在某些方面就是为了给我讲授函数式编程。书本身是一份需要感谢的礼物,Tomas 已经感谢了 Manning 公司的所有编辑和其他工作人员,我也同样要感谢他们。
我的孩子还太小不会编程,我的妻子也……算了,通常,总的来说,当高阶函数困扰我的时候,她总是给我以支持。
(略……)
最后,还要感谢我的英语老师,特别是Simon Howells。随着我学习了更多的编程语言,我也更确信,软件工程师应该注意到语言是用来和人交流的,而不是和计算机。Simon Howells 对语言和文学的热情就像我对计算一样,这份热情也感染了他的学生。他不可能阅读我写过的每一字,但是,他教给我的思想,我受用终生。
JON SKEET
最先它有这个本快的事情(