很多程序员认为SQL是一头难以驯服的野兽。它是为数不多的声明性语言之一,也因为这样,其展示了完全不同于其他的表现形式、命令式语言、面向对象语言甚至函数式编程语言(虽然有些人觉得SQL还是有些类似功能)。 我每天都写SQL,我的开源软件JOOQ中也包含SQL。因此我觉得有必要为还在为此苦苦挣扎的你呈....
分类:
数据库 时间:
2014-07-27 22:08:49
阅读次数:
398
1.4.2.1 阅读函数式程序
我们在清单 1.1 中看过一个示例,就是使用了不可变类型,我们的结论是,不可变类型使代码更具可读性。在本节,我们将考虑两段代码,可以用在我们函数式游戏中。
清单 1.8 中有两个示例,都涉及两个游戏角色(player 和 monster)。第一个示例说明怪物[1]如何移动一步,然后,判断玩家是否正处于危险之中,第二示例演示如何射击。
Listing...
分类:
其他好文 时间:
2014-07-27 11:31:32
阅读次数:
226
Problem Description
In the shooting game, the player can choose to stand in the position of [1, X] to shoot, you can shoot all the nearest K targets. The value of K may be different on different shoo...
分类:
其他好文 时间:
2014-07-26 15:08:00
阅读次数:
383
1.4.2 理解使用不可变性的代码
在前面介绍函数式风格的好处时,我们讨论过不可变性(immutability)。我们使用的示例是一个带边框的椭圆,但是代码的具体行为并不清楚。当我们用不可变对象重写了代码以后,它就变得更容易理解。在后面的章节中,我们会回到这个主题并更详细地讨论。此示例的目的是显示在实践中不可变的对象的表现。
再次强调,如果你在此时没能全部掌握,也不要担心。想象一下,我们...
分类:
其他好文 时间:
2014-07-26 15:01:26
阅读次数:
151
1.4.1.3 声明式函数动画
函数式编程能够以声明式风格编写库来解决存在的问题,我们已经看到用 LINQ 处理数据,用WPF 处理用户界面;但在函数式编程中,通常是创建库来解决自己的问域。
我们前面提到过,声明式风格可以不考虑实现的细节,遗漏了一些东西。函数式编程没有任何神秘的力量,能为我们实现困难的部分。设计我们自己的库时,需要实现所有的技术细节;只是实现的细节隐藏在库中(就像 LI...
分类:
其他好文 时间:
2014-07-26 02:26:46
阅读次数:
240
最近由于项目需要,刚刚学完了Action委托和Func委托,发现学完了委托就必须学习lambda表达式,委托和Lambda表达式联合起来,才能充分的体现委托的便利、才能使代码更加简介、优雅。Lambda表达式"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化...
分类:
其他好文 时间:
2014-07-26 01:14:46
阅读次数:
268
1.3.5 函数风格如何形成代码
函数式编程范式无疑会对设计和实现应用程序产生影响,但是,这并不意味着一切要从头开始,因为今天正在使用的许多编程原则,同样适用于函数式应用程序,特别是在设计层,如何组织应用程序方面,尤其如此。
函数式编程在实现层可能彻底改变了解决问题的方法。当然,学习使用函数式编程思想,不必马上就实现彻底改变。在 C# 中学到有效使用方法,在 F# 中,对等效的结构同样适...
分类:
其他好文 时间:
2014-07-23 17:02:26
阅读次数:
212
1.4 函数式编程示例
下面的这些示例表明,函数式编程并不是任何意义上的理论学科,你会发现,甚至可能通过现有的 .NET 方法,应用了一些函数式思想。阅读有关函数式编程的内容,将有助于更深层次地理解这些技术,并高效地使用。在这书的后面,我们还将通过一些示例来展示函数式风格重要的实际好处。在第一组示例中,我们将探讨声明式编程。...
分类:
其他好文 时间:
2014-07-23 16:39:44
阅读次数:
208
给一个数组,求区间[l,r]中第k大的数。今天被各种数据结构虐爆了,自己还是需要学习一下函数式线段树的,这个东西好像还挺常用。函数式线段树的思想是这样的,对于每个时间状态,我们都建立一颗线段树,查询两个状态在某个区间的差的话,我们只要找到两个状态分别对应的点相减即可。由于每次我使用线段树更新的时候,...
分类:
其他好文 时间:
2014-07-23 11:47:06
阅读次数:
241
1.3.4 设计并发友好的应用程序
使用传统的命令风格编写多线程应用程序时,我们要面对两个问题:
■很难让现有的顺序代码变成并行的代码,因为要显式使用线程,必须修改大部分的基本代码。
■使用共享状态和锁定是困难的。必须仔细考虑如何使用锁来避免争用条件和死锁,留下足够的空间并行执行。
函数式编程给了我们答案:
■使用声明编式程风格时,可以在现有的代码中引入并行。替换很少几个基元,就能...
分类:
其他好文 时间:
2014-07-23 00:12:17
阅读次数:
229