自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (7)
  • 收藏
  • 关注

翻译 16.1.1 事件函数

16.1.1 事件函数    通过显式提供的回调函数使用事件,并不是非常声明性的,我们是用命令式添加事件处理程序,且把整个行为打包在回调函数里面。那么,怎样把事件看成是更具声明性方式呢?我们已经看到过,声明性代码中的一个重要技术是使用高阶函数。最好的例子是处理列表的函数,比如List.filter、List.map 或 List.fold。如果我们有一个来自文件系统监视程序(称为 watc

2011-12-31 23:20:24 727

翻译 16.1 使用事件有反应的编程

16.1 使用事件有反应的编程     在这一点上,你知道如何在 C# 中,写响应事件的应用程序,我们已经看到,同样的技术也可以用在 F# 中。这种模式是为事件注册一个回调函数(或方法),在事件发生时,回调函数执行。这可以响应事件,也许更新了应用程序的状态,或改变了用户界面。    让我们先用一个例子回顾一下这种方法。清单 16.1 的代码,使用 FileSystemWatcher 类

2011-12-31 15:52:01 670

翻译 16 第十六章 开发有响应的函数式程序

16 第十六章 开发有响应的函数式程序本章讨论■ 响应事件,及在 F# 中的声明■ 事件作为第一类值使用■ 用异步工作流编程 GUI■ 使用消息传递并发     这最后一章是关于响应外部事件的,比如用户输入。我们还将讨论另一个 F# 功能,可用于创建并发程序。尽管这些听起来好像不相关的主题,但是,会看到探索它们的相似之处。本章中看到的所有库和示例,都共享一个相似的体

2011-12-31 10:10:36 507

翻译 15.7 第十五章小结

15.7 第十五章小结     本章开始,我们讨论了面向语言(language-oriented)的编程风格,特别是关于创建内部 DSLs 技术。我们简要提及抽象值表示技术,在这种技术下,通常设计一种数据类型(特别是差别联合)来表示连接符。接下来,我们讨论了流畅的接口(fluent interfaces),它在 C# 中尤其有用,和组合库,在函数式编程语言中使用。    我们在这一章用

2011-12-30 17:04:01 541

翻译 15.6.3 使用建模语言

15.6.3 使用建模语言     也许有关可组合库最有价值的事情,就是可以使用由库设计人员提供基本的基元,通过组合,来创建更复杂的函数。这样,就让库更灵活,因为库的用户(这里的金融专家)可以创建他们需要的基元。作为核心库的设计人员,我们只需要提供足够丰富的基元,允许用户建立更多的。    清单 15.25 演示这样定义的两个函数,根据刚刚创建的基元。第一个定义的函数,生成一个交易窗口

2011-12-30 17:03:38 593

翻译 15.6.2 定义基元

15.6.2 定义基元     首先要定义将要处理的值类型,然后,实现几个可以在以后组合的基元。基元数据类型叫 Contract,表示可能出现在特定日期和时间的交易。 声明 CONTRACT 类型     你可以看到在清单 15.23 中,Contract 类型与动画示例中的行为类型很相似,它是一个差别联合,只有一个识别器,名为 ContractFu

2011-12-30 12:12:07 677

翻译 15.6.1 建模金融合同

15.6.1 建模金融合同     金融业使用了大量的合同类型,包括掉期和期货(swaps and futures)。合同一般指定买进或卖出哪些商品,在什么时候,什么价格。当创建处理合同的应用程序时,可以为每个已知类型的合同直接硬编码支持。不幸的是,会有大量的选项,因此,这种解决方案不会非常灵活。    相反,我们将创建一种语言,能够描述一般的合同。合同最基本组成部分是贸易

2011-12-30 12:10:25 796

翻译 15.6 开发金融建模语言

15.6 开发金融建模语言     本章到目前为止,我们所讨论的大多数概念,如果你计划设计自己的函数库或 DSL,都是需要知道的。为了给你一定的概念,为了解决更加面向业务的问题,应该如何做,我们将勾画一个库,它能够用于对金融合同建模。这个示例的动机是 Simon Peyton Jones 等人的一篇文章《组合合同:在金融工程中的冒险》[Jones, Eber, Seward, 20

2011-12-28 13:27:19 786

翻译 15.5.4 创建太阳系的动画

15.5.4 创建太阳系的动画     至此,我们已经实现了动画库的所有类型和函数。虽然我们使用的是 F# Interactive,但是,把库的核心部分保存到一个单独的文件是个好主意(例如,Animations.fs)。然后,我们可以加载整个库,使用 #load 指令,将文件名作为参数。这种方式,也确保该内部类型扩展(包括我们添加到行为的运算符)正确加载,因为,内部类型扩展必须用相

2011-12-28 13:26:31 715

翻译 15.5.3 添加动画基元

15.5.3 添加动画基元     我们的目标是使构造动画的代码尽可能声明性和简单,为此,我们要提供专门为创建动画而设计的基元。我们已经看到,已经可以做需要的任何事情,只用现有的处理行为和绘图的函数,但是,如果我们可以使用专门的用于创建动画的基元,而不是显式使用提升,代码看起来会更优雅。让我们首先看一下处理绘图的函数。 创建用于动画的绘图基元

2011-12-27 12:30:48 654

翻译 15.5.2 使用行为创建动画

15.5.2 使用行为创建动画     我们已经有了创建动画的所有基础部件和显示的表单,现在,可以开始创建动画了。我们将从绘制两个彩色的圆开始,以前在 F# 中已经创建了,创建移动的动画。本节中,我们只使用 F#,因为将使用 F# Interactive 进行实验。你会看到,我们写的基元提供了很大的灵活性,我们会考虑可能用动画图形要做的其他操作。之后,还要回到 F# 和 C# 去实

2011-12-26 14:42:45 516

翻译 15.5.1 F# 中实现的动画形式

15.5.1 F# 中实现的动画形式     在本节中,我们将实现显示动画的窗体。在 F # 中,特别有趣,因为,我们将在 F# Interactive 中使用它,创建与实验动画。在这里,F# 开发的典型风格是非常不同于 C#。在 C# 中,我们会实现窗体,创建动画,编译应用程序,然后运行。在 F# 中,我们会实现窗体,把它装载到 F# Interactive,然后,尝试写一些动画

2011-12-26 14:41:42 620

翻译 15.5 创建动画

15.5 创建动画     在这一章开始,我们说过要创建动画库,在这里,很多页都过去了,还没有看到一个动画。这应该是十分清楚的,我们一直在构建的所有基础,都是为了对我们的绘图进行动画处理更容易。    让我们简单回顾一下,到目前为止所做的工作。我们创建了一个类型 Behavior,表示行为随时间变化的值,还有一些函数,用来基于旧的行为创建新的行为。我们还创建了一个绘图类型(

2011-12-21 16:41:21 557

翻译 15.4.2 创建和组合绘图

15.4.2 创建和组合绘图     我们要保持事情,简单地画一个圆。我们可以用类似的方式,实现很多其他类型,但是,我们来看一个例子,可以添加更多的绘图。精确的形状并不是特别重要的,在我们可以讨论的更有趣的组合的话题之前,需要一些具体的东西。 创建和移动圆     创建绘图,大约就是在图形对象上提供绘制的函数,图形对象是这个函数参数值。图形类型具有

2011-12-21 16:15:45 743

翻译 15.4.1 表示绘图

15.4.1 表示绘图     在第 2 章,我们用形状的概念来演示差别联合。对于绘图应用程序,这将是一个不错的选择,应用程序需要了解形状的结构。对于我们动画库,这不是特别灵活,所以,我们将使用更具扩展性的表示形式。在 C# 中,绘图将是一个接口,有一个方法绘制图形对象。它可以更简单地表示为一个函数,我们还想要隐藏其内部表示形式。    F# 版本将按 C# 的风格,也使用接口。原因是

2011-12-19 16:09:49 1071

翻译 15.4 使用绘图

15.4 使用绘图     如果我们要使用绘图,首先我们必须问自己,什么是绘图?在一般意义上,我们希望它表示什么?我们希望能够用它来做什么?在我们的动画中,表示图形的最好方式是什么?    这些问题我们要考虑一会儿,但我们已经知道了一些答案, 特别是,我们知道希望能够组合绘图。动画可以描述为,一些绘图的移动,且可以组合成单个图形。在将来,我们还可以支持其他几何变换,比如缩放和倾斜。

2011-12-19 15:32:16 443

翻译 15.3.4 在 C# 中实现提升与映射

15.3.4 在 C# 中实现提升与映射     提升函数和映射操作是构建行为的核心,所以,在该项目的 C# 版本中也需要它们。在前面探讨 F# 版本之后,对于这些函数应该做什么,你会有一些概念,所以,我们不会详细讨论全部内容。C# 版本与 F# 代码的差异很有趣。    每当我们看到 F# 中的 map 函数,在 C# 中使用 Select。这是 LINQ 中使用的标准术语,所以,我

2011-12-19 10:54:11 762

翻译 15.3.3 将函数转换成“行为函数”

15.3.3 将函数转换成“行为函数”     Behavior.map 函数取两个参数,我们在清单 15.8 中指定了。偏函数应用可以用一个参数值来调用这个函数。以这种方式使用函数,会给我们一个有趣的见解。在清单 15.9 中,我们只指定第一个参数值 (函数);我们将使用 abs 函数,返回一个整数的绝对值。 Listing 15.9 Using Behavior

2011-12-18 19:19:03 801

翻译 15.3.2 将函数应用到行为

15.3.2 将函数应用到行为     在早先描述行为时,我们解释过,行为是一个复合值,相似性在于 Behavior 和 Option 之间。两者都是包含另一个值的复合值,但有不同的方式。选项类型的不寻常,在于它可能为空,而行为的不寻常,在于值依时间而变。    这个比喻表明行为的方向。我们已经看到,Option.map 在几个不同的上下文中,指定的函数应用到由该选项携带的

2011-12-18 10:52:08 632

翻译 15.3 行为的计算

15.3 行为的计算       在本节中,我们会写几个工具函数,来帮助处理行为。虽然我们在这个阶段实验,但这一节中的大多数代码会用实现动画示例中。我们会首先在 F# 中实现这些函数,用 F# Interactive 进行测试,然后,重新在 C# 中实现最重要的部分。    为了测试任何使用行为的代码,我们需要实现的第一件事,是一个函数,在指定的时间读取行为的值。

2011-12-16 16:51:32 609

翻译 15.3.1 读取值

15.3.1 读取值     计算行为在给定时间的值很容易,其内部表示为一个函数,取时间作为参数值,计算出值,所以,我们需要执行这个函数。清单 15.7 显示函数,叫 readValue,取时间和行为作为参数,返回行为的值。有了这个函数,就可以从我们先前创建的基元行为中读取值。 Listing 15.7 Reading values of behaviors at the spec

2011-12-16 15:28:02 584

翻译 15.2.4 在 F# 中创建简单的行为

15.2.4 在 F# 中创建简单的行为       我们将从复制刚才在 C# 中已经实现的功能开始。清单 15.6 实现两个行为值(wiggle 和 time),和一个用于创建常量行为的函数(forever)。 Listing 15.6 Primitive behavior functions and values (F#) > open System;;> le

2011-12-13 17:23:25 498

翻译 15.2.3 在 C# 中创建简单的行为

15.2.3 在 C# 中创建简单的行为       我们将从创建行为的几个基本函数开始。一旦有了一个好的方式进行可视化行为以后,返回到这个主题,并添加有趣的构造。     创建行为最简单的方法,是取一个我们可以直接使用的函数,作为行为的底层表示。这将是一个内部方法,用于其他基元的实现。因为我们要对象的创建打包到一个方法中,可以在非泛型类中,创建一个泛型方法,并使用 C# 的类型推断,

2011-12-13 16:41:52 735

翻译 15.2.2 介绍行为

15.2.2 介绍行为     行为很大程度上是独立于动画库的。它们表示的值随时间变化:它不可能与图形或绘图相关。行为可能模拟网络流量、潮汐运动、股票价格,机器人的感官输入值,比如温度、或者任何其他随时间变化的测量。    这意味着,我们可以首先实现行为,不限制我们自己的动画。以通常的函数方式,我们首先考虑如何要表示行为,然后,实现一些简单的行为。我们已经创建了一些行为,能够将它们应用

2011-12-13 14:27:19 571

翻译 15.2.1 介绍函数式动画

15.2.1 介绍函数式动画     在这一章中我们实现的库,很大程度上是由 Fran 激发的。我们重点关注单独的动画,不会详细讨论响应事件。在下一章,我们将讨论如何扩展库来支持响应图形用户界面编程。动画可以使用时变值,进行巧妙的建模。在 Fran 中,这些值称为行为,我们也使用这个名字。 注意     在我们的动画系统中,行为是一个时变值,它可以表

2011-12-12 20:34:40 412

翻译 15.2 创建动画值

15.2 创建动画值     在函数式语言中,使用连接符库表达动画的想法来自一个叫 Haskell 的项目,叫 Fran,,由 Conal Elliott 和 Paul Hudak 在 1997 年创建,[Elliot, Hudak, 1997]。 Fran(是 functional reactive animations 的简称)可以创建动画,并指定动画如何响应事件,比如,鼠标单击。

2011-12-12 20:15:00 430

翻译 15.1.4 可组合函数和对象

15.1.4 可组合函数和对象     创建可组合库的第二个选项,是构建一些函数或对象,表示声明性的规范,并可以执行。这限制了用组合对象所能做的操作,因为,操作是每个基元的一个固有部分。事实上,许多时候,只需要执行单个操作,比如,绘制动画帧,或计算金融合同的交易。我们可以轻松地增加新的基元,为可组合的基元实现新的方法。在函数式编程语言中,以这种方式写出的库,被称为连接符库(comb

2011-12-12 19:53:32 527

翻译 15.1.3 可组合值

15.1.3 可组合值     把问题描述为值,是把"语言"嵌入 F# 中的最简单的方法。这仅适用于简单的问题:我们不要指定任何复杂行为(比如,过滤函数的断言) ,和只需要通过组合基元对象或集合,并指定它们的属性,就能描述的大多数的问题。    当代码有效地描述值时,我们可以在 F# 中实现它,通过创建类型,能够创建指定所有属性的值。表示这类问题的最常见的 F# 类型,是差

2011-12-11 19:23:53 515

翻译 15.1.2 定义符号

15.1.2 定义符号     LISP 代码可读性很好,很容易理解它的意思,代码不展现任何技术细节。我们不能说,要创建一个对象,把动画表示成可以处理的树形数据结构,或者要创建一个函数,知道如何绘制这个动画。这是有关声明式编程的好事情,我们只要使用这些库,无需考虑技术细节。    当然,技术细节还是要在某个地方表示的,即把它们实现成库。在 F# 和 C# 中,创建可组合库的

2011-12-10 19:53:52 877

翻译 15.1.1 从符号组合出动画

15.1.1 从符号组合出动画     除其他外,LISP 语言以其简单但功能强大的语法闻名。当写任何复杂的程序时,你总是最终定义自己的基元,然后指定它们的意思。下面的示例演示如何能定义一个简单的动画,使用 LISP 的语法。该代码创建两个移动的盘子:一个绿色,直径为 50 ,一个小一点,红色, 直径 20。绿色的围绕点 (0,0)以 100 像素的半径旋转,红色在两个指定点之间移

2011-12-10 15:52:02 638

翻译 15.1 可组合设计方法

15.1 可组合设计方法     让我们首先回顾一下,我们可以把可组合设计的概念变成现实。用几个基元组合成复杂结构的想法,在 LISP 语言中已经使用很长时间了。我们会分析 LISP 的一个示例,将给我们在 F# 和 C# 中,进一步讨论可组合库,提供一个很好的背景。

2011-12-10 13:48:00 546

翻译 15 第十五章 创建可组合函数库

15 第十五章 创建可组合函数库 本章介绍■ 设计函数式连接符库■ 处理时变值■ 组合时变值与绘图■ 开发金融合同模型库     函数式编程表现出来的很多方面的设计原则,是可组合性(compositionality)。这意味着,可以使用组合操作,从几个基元构建出复杂的结构。我们将描述一般意义上的可组合化,因为它可以以无数的形式出现。让

2011-12-09 20:43:42 540

翻译 14.4 第十四章小结

14.4 第十四章小结     在这一章,我们回顾了以函数方式写并行应用程序的三种方法,其中两个是基于函数式编程的基本方面。    声明式编程是适宜于数据并行化,PLINQ 使之特别容易。我们可以在 C# 和 F# 中使用,包装器模块使 F# 代码更符合语言习惯,比直接使用 PLINQ。C# 和 F# 都使用高阶函数来表示要做的工作,既可以直接,也可以通过 C# 查询表达式

2011-12-08 20:43:52 429

翻译 14.3.5 以并行方式运行仿真

14.3.5 以并行方式运行仿真     要并行运行模拟,我们将使用 Task 基于任务的并行度,和使用 PLINQ (和 F# 中的 PSeq 模块)声明式并行度的组合。计算仿真的新状态,需要执行两个基本任务:移动所有动物,移动所有捕食者。有了 14.3.4 节的算法,这两个任务花大致相同的时间,所以,这在一代上双核的机器上就足够了。    把这个工作拆分为两个任务,并不

2011-12-08 19:57:58 743

翻译 14.3.4 实现智能动物和捕食者

14.3.4 实现智能动物和捕食者     计算动物和捕食者的新位置的算法,在 C# 和 F# 中,看起来很相似,因为,我们可以使用相同的集合处理函数,来实现它们。在 F# 和其他标准的函数式语言中,这些都属于标准库,在 C# 3.0 中,可使用 LINQ。我们将在接下来的两小节中,来讨论这些算法,每一小节展示一种语言。 在 F# 中移动动物

2011-12-08 18:42:02 889

翻译 14.3.3 实现辅助函数

14.3.3 实现辅助函数     在讨论计算动物位置的代码之前,我们要稍稍离题。我们需要实现几个函数,将由确定动物和捕食者位置的算法使用。出于各种用途,这些函数需要使用随机数,要正确地生成随机数,首先需要讨论如何安全地访问,那些不是线程安全(thread-safe)的对象。这可能是个问题,当我们处理具有可变状态的对象时,这是 .NET 类型的通常情况。 安全地访问

2011-12-07 21:54:06 617

翻译 14.3.2 设计仿真操作

14.3.2 设计仿真操作     在本节中,我们会考虑需要实现仿真的操作。现在,我们不会实现所有困难的操作,因为,我们只想要设计应用程序的结构。我们的首要目标是用最小的努力,运行这个应用程序,然后,再回到有趣的部分,比如,描述动物和捕食者的动作的算法。    以典型函数的方式,我们将从一些初始状态开始,并在每一步中,会基于上一个状态,创建新的状态。这意味着,我们需要一个操

2011-12-07 17:40:16 769

原创 ekrn 占用高内存

ekrn 占用高内存    ekrn 占用高内存,CPU 占用 100%,以及阻止上网。    在高级设置-Web和电子邮件-协议过滤-Web和电子邮件客户端-排除的应用程序中:    选中 IE 等浏览器。

2011-12-07 13:48:26 1412

翻译 14.3.1 表示仿真的世界

14.3.1 表示仿真的世界     我们的仿真世界是很简单的,它只包含动物和捕食者,因此,可以用两个列表来表示。原则上,我们还应该包括这个世界范围的宽度和高度,但是,我们使用固定的大小来,以使事情更简单。你可以得到有关这个世界更好地了解,我们试图通过图 14.3 来表示,它显示了仿真运行中的一个屏幕快照。图 14.3 运行中的念真,有 10 个捕食者(大圆圈),在

2011-12-07 12:36:37 625

翻译 14.3 创建并行仿真

14.3 创建并行仿真    我们的下一个示例应用程序打算仿真动物和捕食者的世界。捕食者的目标是让靠近动物去捕猎,而动物的目的是从世界范围逃跑。就像我们的图像处理示例一样,在这里,只显示最有趣的方面,完整的源代码在本书的网址上可用。    这是一个以数据为中心的应用程序,所以,第一个任务是确定主数据结构。在这种情况下,它是这个世界的"当前"状态的表示。这个世界实际上只有一个操作:实现时

2011-12-06 19:52:46 597

SQL.Server.2012.Integration.Services-2

SQL.Server.2012.Integration.Services

2012-04-20

SQL.Server.2012.Integration.Services

SQL.Server.2012.Integration.Services

2012-04-20

SQL.Server.2012.Administration-2

SQL.Server.2012.Administration

2012-04-20

SQL.Server.2012.Administration

SQL.Server.2012.Administration

2012-04-20

jQuery.1.4.Reference.Guide

jQuery.1.4.Reference.Guide

2010-02-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除