原文:泛函编程(7)-数据结构-List-折叠算法

折叠算法是List的典型算法。通过折叠算法可以实现众多函数组合 function composition 。所以折叠算法也是泛函编程里的基本组件 function combinator 。了解折叠算法的原理对了解泛函组合有着至关紧要的帮助。折叠算法又可分右折叠和左折叠。我们先从右折叠 foldRight 开始: 从以上两图示可以得出对List a,b,c 的右折叠算法:op a,op b,op ...

2015-03-11 18:54 2 2126 推荐指数:

查看详情

编程(0)-什么是编程

什么是编程(Functional Programming)?编程就是用函数编写程序。这个回答太抽象,等于没说。 再说清楚一点:编程就想砌积木一样把函数当成积木块,把函数的输出输入作为积木的楔子和楔孔,把一个函数的输出当作另一个函数的输入组合成一个更大的函数。整个砌积木的过程就是 ...

Mon Mar 09 21:13:00 CST 2015 3 2039
编程(36)-Stream IO:IO数据源-IO Source & Sink

上期我们讨论了IO处理过程:Process[I,O]。我们说Process就像电视信号盒子一样有输入端和输出端两头。Process之间可以用一个Process的输出端与另一个Process的输入端连接起来形成一串具备多项数据处理功能的完整IO过程。但合成的IO过程两头输入端则需要接到一个数据 ...

Tue Aug 04 21:39:00 CST 2015 0 1835
编程(32)-IO:IO Monad

由于编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以必须把包含外界影响(effectful)副作用不纯代码(impure code)函数中的纯代码部分(pure code)抽离出来形成独立的另一 ...

Tue Jul 07 06:20:00 CST 2015 3 1357
数据结构算法(4) -- list、queue以及stack

今天主要给大家介绍几种数据结构,这几种数据结构在实现原理上较为类似,我习惯称之为类list的容器。具体有list、stack以及queue。 list的节点Node 首先介绍下node,也就是组成list的节点。从面向对象的角度来说节点也是就一个类,list里面包含了node对象 ...

Thu Dec 13 01:40:00 CST 2018 0 670
数据结构算法(c++)——跳跃表(skip list)

今天要介绍一个这样的数据结构: 单向链接 有序保存 支持添加、删除和检索操作 链表的元素查询接近线性时间 ——跳跃表 Skip List 一、普通链表 对于普通链接来说,越靠前的节点检索的时间花费越低,反之则越高。而且,即使我们引入复杂算法,其检索的时间花费依然 ...

Sun Apr 23 05:43:00 CST 2017 0 6528
编程(31)-IO:Free Monad-Running free

在上节我们介绍了Free Monad的基本情况。可以说Free Monad又是一个以数据结构替换程序堆栈的实例。实际上Free Monad的功能绝对不止如此,以heap换stack必须成为Free Monad的运算模式,这样我们才可以放心的使用Free Monad所产生的Monadic ...

Thu Jun 25 22:10:00 CST 2015 8 1394
数据结构算法

基本概念和术语 1、数据(Data)   数据是外部世界信息的载体,它能够被计算机识别、存储和加工处理,是计 算机程序加工的原料。计算机程序处理各种各样的数据,可以是数值数据,如整 数、实数或复数;也可以是非数值数据,如字符、文字、图形、图像、声音等。 2、数据元素(Data Element ...

Tue Oct 12 23:02:00 CST 2021 0 202
数据结构算法(一)

算法的概念 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。 算法是独立存在的一种解决问题的方法和思想。 对于算法而言,实现 ...

Tue Mar 06 00:28:00 CST 2018 0 2795
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM