7.1 函数式数据结构

用函数编程,程序处理的数据总是保存在数据结构中。数据结构和对象之间的区别在于,数据结构公开了表示数据(从名字就可以知道) 的结构;知道了数据的结构便于写处理的代码,但要到第九章才讨论,F# 还提供了一种封装结构的方法,如同面向对象编程,当我们想从库中导出 F# 数据结构,或者用于 C#。正如我们在第二章讨论函数概念时所说的,这些数据结构是不可变的。

在这一章,我们将讨论两个最常见的程序数据表示形式:

■  组合值列表,比如元组或差别联合

■ 更一般的递归数据结构,比如树

在第四章,我们使用元组列表来绘制饼图,其中每个元组包含有标题和值。使用元组很简单,但想表达更复杂的数据,则是不切实际的。在这一节,我们将学习 F# 的记录(record)类型,这是尚未讨论的 F# 核心数据类型。

时间: 2024-11-10 13:21:13

7.1 函数式数据结构的相关文章

7.1.2 C# 中的函数式数据结构

我们曾经用 C# 实现过几个函数式不可变数据类型,比如 FuncList 或元组.在 C# 中,是通过以特殊方式写类来实现的,最重要的是,所有属性必须是不可变的,这是通过使用只读字段,或者通过声明的属性具有私有的 setter,且只在类的构造函数中设置来实现.在清单 7.3 中,我们使用第一种方法实现似于类清单 7.1 中 Rect 类型的类. 清单 7.3 不可变 Rect 类型 (C#) public sealed class Rect { private readonly float le

Scala函数式编程(四)函数式的数据结构 下

前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结构 上 1.List代码解析 今天介绍的内容,主要是对上一篇介绍的scala函数式数据结构补充,主要讲代码.可以先看看上一节,主要讲的是函数式的list,Scala函数式编程(四)函数式的数据结构 上.这些代码我都放在我的公众号里面,包括函数式的List以及一个函数式的二叉搜索树,关注公众号:哈尔的

数据结构《20》----Immutable stack

有趣的函数式数据结构<一>----不可变栈 什么是不可变?往栈中插入一个元素,原来的栈保持不变,返回一个新的栈(已插入新的元素). push, pop,getMax 等操作都要求在 常数时间内完成. 可能读者会产生疑惑,既然要返回一个新的栈,是不是就必须先拷贝一份原来的栈,然后在新的栈中插入元素. 但是这样复杂度就是线性的,如何能够在常数时间内完成呢?? 这里,就是immutable DATA STRUCTRUE 的强大.. 本文给出一个C++ 的实现版本,基本理想是利用内存共享,以及均摊时间

cala 函数式编程

变换算子Transform scala> List(1,2,3,4,5).map(_*2) res0: List[Int] = List(2, 4, 6, 8, 10) scala> List(1,2,3,4,5)reduceLeft{*} res3: Int = 120 函数Closures (闭包) scala> var factor = 3 factor: Int = 3 scala> val multipilier = (i:Int) => i* factor mul

JS函数式编程 3.1 Javascript的函数式库

?? Functional Programming in Javascript 主目录第三章 建立函数式编程环境 Javascript的函数式库 据说所有的函数式程序员都会写自己的函数库,函数式Javascript程序员也不例外. 随着如今开源代码分享平台如GitHab.Bower和NPM的涌现,对这些函数库进行分享.变得及补充变得越来越容易. 现在已经有很多Javascript的函数式变成苦,从小巧的工具集到庞大的模块库都有. 每一个库都宣扬着自己的函数式编程风格.从一本正经的数学风格到灵活松

第十章 数据结构的效率

第十章数据结构的效率 本章介绍 ■优化和改进递归函数 ■使用尾递归(tail-recursion)和连续(continuations) ■高效地使用列表和数组 到目前为止,,我们在本书中已经使用过的函数式方法,有递归和函数式数据结构,比如,不可变列表.我们能写的最简单代码,是使用基本的  F# 集合类型(列表),直接表达我们的意图.在很多情况下,这种方法是合适的:但是,用来处理大型数据集时,"显而易见",代码有时会导致性能问题.在这一章,我们将学习一些写代码的方法,可以不管输入数据的大

Raft算法国际论文全翻译

最近在开发强一致性的分布式算法,因此需要深入理解下Raft算法,这里对Raft论文进行了翻译,留以备用 - Sunface. 英文版论文:https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf Raft 是一种通过日志复制来实现的一致性算法,提供了和(多重)Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 是不同的,因此Raft 算法更容易理解和应用.Raft 有几个关键模块:领导人选举.

WC2015流水账

THU那四场考试没考好,只有20+名.这也许是我OI生涯中最后一场吧(已确认是最后一场),真是感慨万千. day0 搬进浙大宿舍404房间(神房间号),四个人一间.中午发现学军伙食相当良心,是我参加的OI活动中最良心的 day1 徐寅展 讲了一些动态维护图的连通性以及最小生成树的算法,太深了,基本上只听懂第一个维护图的连通性的算法.下面就简单讲一下这个算法吧. 首先,这个算法是在线算法,其时间复杂度是m lg^2.离线算法可以做到m lg,用LCT维护最大生成树就行了(边权为边被删除的时间).

有用函数编程

<序> 感谢 关于本书 关于封面 第一部分 学习函数式思维 第一章 不同的思维 1.1 什么是函数式编程? 1.2 通往有用函数编程之路 1.3 用函数式编程提高生产力 1.3.1 函数范式 1.3.2 声明式编程风格 1.3.3 了解程序的执行 1.3.4 设计并发友好的应用程序 1.3.5 函数风格怎样形成代码 1.4 函数式编程演示样例 1.4.1 用声明式风格表达意图 1.4.1.1 用 LINQ 处理数据 1.4.1.2 用 XAML 描写叙述用户界面 1.4.1.3 声明式函数动画