码迷,mamicode.com
首页 >  
搜索关键字:函数编程    ( 392个结果
10.4 第十章小结
10.4 第十章小结 在这一章,我们探讨了与函数程序效率有关的问题,讨论了用函数方式处理大量数据。因为大多数函数程序使用递归实现,这一章的很大一部分就是围绕这个主题。 可以看到,使用递归的代码,一定要仔细,避免由于递归太深,引起堆栈溢出的错误。在本章开头,我们讨论了一种称为尾递归的技术,它可用来重写我们熟悉的列表处理函数(如map and filter),能避免堆栈溢出。单靠尾递归,不...
分类:其他好文   时间:2015-01-04 09:58:51    阅读次数:112
10.3.2.1 使用连续处理树
10.3.2.1 使用连续处理树   要把我们以前实现的 sumTree 函数,转变成使用连续的版本,首先,要给这个函数添加一个额外的参数(连续);其次,还需要改变函数返回结果的方式,不是简单地返回值,而是把它作为参数值,给连续进行调用。 清单 10.18 是代码的最终版本。   清单 10.18 使用连续,计算树中元素的和 (F# Interactive) > let rec sumT...
分类:其他好文   时间:2015-01-03 21:06:33    阅读次数:186
10.3.2 利用连续的代码
10.3.2 利用连续的代码   问题是,我们既希望做尾递归调用,还要在尾递归调用完成后,再执行一些代码。这看起来是一个棘手的问题,但有一个有趣的解决方案。我们把要在递归调用完成后执行的所有代码,拿来作为参数值,提供给递归调用,这样,我们要写的函数将仅只包含一个递归调用。 可以把这个看作是另一种类型的累加器参数:我们不是累加值,而是累加“需要在以后运行的代码”。现在的问题是,我们如何能拿到其...
分类:其他好文   时间:2015-01-03 19:53:36    阅读次数:140
10.3.1 树处理的难点
10.3.1 树处理的难点   我们来看一个简单的处理树的例子。清单 10.15 声明了一个表示整数树的类型,并用递归函数,统计树中所有值的和。   清单 10.15 树型数据结构并计算元素的和 (F# Interactive) > type IntTree =    [1]     | Leaf of int     | Node of IntTree * IntTree;; t...
分类:其他好文   时间:2015-01-03 17:26:39    阅读次数:155
10.2.3.2 在 C# 中以函数风格使用数组
10.2.3.2 在 C# 中以函数风格使用数组   由于有了 LINQ to Object,在 C# 3.0 中,我们已经可以使用许多函数结构来处理数组。大多数 LINQ 运算符不返回数组:如果在数组上调用 Enumerable.Select,结果将返回 IEnumerable。在某些情况下,我们还是愿意将结果保存在数组中,避免调用Enumerable.ToArray,将结果序列复制回数组的...
分类:编程语言   时间:2015-01-03 14:42:13    阅读次数:205
10.3 连续(continuations)
10.3 连续(continuations)   从本章开始,我们讨论递归调用。我们已经看到过尾递归(tail recursion),这是进行递归调用的重要技术,不需要在栈分配任何空间。由于有了尾递归,写出的函数式列表处理函数,能够处理大型数据集,而不需要出一身汗。 我们已经使用尾递归重写了许多函数,利用累加器参数,但并不是每个函数都能这样重写。如果函数需要执行两个递归调用,那么,很显然不能...
分类:其他好文   时间:2015-01-03 14:40:31    阅读次数:104
10.2.3.1 以函数方式使用数组
10.2.3.1 以函数方式使用数组    我们先来看一个 F# 的例子,这是两个F# 库处理数组的重要的高阶函数,然后,用 C# 实现相同的功能。清单 10.12 的中脚本,先用随机数初始化一个数组,然后,计算出它们的平方。   清单 10.12 处理数组的函数式方法(F# Interactive) > let rnd = new System.Random();;  val rnd...
分类:编程语言   时间:2015-01-02 17:35:06    阅读次数:226
10.2.3 处理数组
10.2.3 处理数组   数组相似于简单的计算机内存模型,本质上,就是一组有编号的盒子,只要知道的编号,就可以轻松地读取或更改在任何盒子中的值。数组形成连续的内存块,所以,开销非常小,能用于存储大型数据集;数组[的代间]是提前分配的:一旦创建,其大小就固定了,因此,不能把新的值添加已有的数组中。 数组是可变的数据结构,因此,很容易修改。这在有些情况下是有用的,但对于函数式程序员来说,在有关...
分类:编程语言   时间:2015-01-01 17:22:50    阅读次数:154
10.2.2.1 添加元素到列表
10.2.2.1 添加元素到列表   到目前为止,我们已经看到如何追加元素到已有(函数式)列表的前面;如果我们想在列表的末尾追加元素,又该如何做呢?这要求听起来是合理的,那么,我们尝试实现它。清单 10.10 显示了在列表的前面和在后面插入naïve 企图之间性能的差别。   清单10.10 在列表中添加元素(F# Interactive) > let prepend el list =...
分类:其他好文   时间:2015-01-01 00:15:00    阅读次数:240
10.2.1 用尾递归避免栈溢出(续!)
10.2.1 用尾递归避免栈溢出(续!)   [ naïve 不像是英语,不知道什么意思。 ] 第六章中的列表处理函数并不是尾递归。如果我们传递很大的列表,就会因栈溢出而失败。我们将用尾递归重写两个函数(map 和 filter),将改正这个问题。为了对照,在清单 10.8 中包括了原来的实现。为了避免名字冲突,已经改名为 mapN 和 filterN。   清单10.8 naïv...
分类:其他好文   时间:2014-12-30 17:15:25    阅读次数:182
392条   上一页 1 ... 29 30 31 32 33 ... 40 下一页
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!