C++11C++14话说新标准出来也蛮久的了, 是时候跟进了, 先试试lamba, 还满好玩。先看看不用lamba, 用仿函数的代码如何:class Acc // functor{public: Acc(int & Uppercase): Uppercase_(Uppercase){} ...
分类:
编程语言 时间:
2015-07-17 11:22:59
阅读次数:
195
在前几期讨论中我们终于推导出了Free Monad。这是一个Monad工厂,它可以把任何F[A]变成Monad。可惜的是它对F[A]是有所要求的:F必须是个Functor。Free Monad由此被称为由Functor F 产生的Monad。F必须是Functor,这个门槛使我们在使用Free M....
分类:
其他好文 时间:
2015-07-13 15:24:47
阅读次数:
136
转载声明:本文转自网络,稍加整理以备学习和参考之用。
函数对象/仿函数
提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。接下来要介绍的是另外的一种组件,函数对象(Functi...
分类:
其他好文 时间:
2015-07-01 23:45:31
阅读次数:
486
fmap :: (T -> R) -> Functor<T> -> Functor<R> lifts a function of type T -> R into a function of type Functor<T> -> Functor<R>; flatMap :: (T -> Monad<...
分类:
其他好文 时间:
2015-05-30 13:26:45
阅读次数:
198
经过了一段时间的学习,我们了解了一系列泛函数据类型。我们知道,在所有编程语言中,数据类型是支持软件编程的基础。同样,泛函数据类型Foldable,Monoid,Functor,Applicative,Traversable,Monad也是我们将来进入实际泛函编程的必需。在前面对这些数据类型的探讨.....
分类:
其他好文 时间:
2015-05-29 00:49:52
阅读次数:
153
作为STL六大组件之一,在STL源代码及其应用中,很多地方使用了仿函数(functor),尤其在关联型容器(如set、map)以及algorithm(如find_if、count_if等)中。虽然已经接触functor很长时间了,但一直只是编写一些简单的functor,至于为什么要使用functor...
分类:
其他好文 时间:
2015-05-22 01:49:29
阅读次数:
451
前面我们讨论了Applicative。Applicative 就是某种Functor,因为我们可以用map2来实现map,所以Applicative可以map,就是Functor,叫做Applicative Functor。我们又说所有Monad都是Applicative,因为我们可以用flat.....
分类:
移动开发 时间:
2015-05-21 22:06:59
阅读次数:
260
一般,要想改变流对下一个对象的输出方式,需要使用manipulator,如:setw, setfill等。通过定义functor,用户可以很容易定义自己的manipulator。但是如果想要添加流状态(类似于对流中存储的整数的输出进制),却不那么容易,需要使用xalloc, pword, iword等。
假设现在需要输出一些变量。因为存储字符串代价比较高,通常会用整数关键字来代表它们。这...
分类:
其他好文 时间:
2015-04-11 13:23:15
阅读次数:
199
函数式访问器在haskell里被叫做Lens。在面向对象语言里这个没有什么必要,不过作为练习,我们看如何在scala表示van Laarhoven lens.先给出haskell里的lens类型:type Lens s a = forall f. Functor f => (a -> f a) ->...
分类:
其他好文 时间:
2015-03-16 14:19:57
阅读次数:
146
在理解Functor之前,必须对抽象代数的范畴论有所了解,有范畴论的知识作为铺垫,感觉Functor也不是那么的难以理解了。 一个范畴C包括: ?一个由对象所构成的类ob(C) ?对象之间的态射所构成的类hom(C)。每一个...
分类:
其他好文 时间:
2015-03-09 21:03:05
阅读次数:
138