- 博客(5)
- 收藏
- 关注
原创 泛函编程(32)-泛函IO:IO Monad
由于泛函编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以如何把包含外界影响(effectful)副作用的不纯代码(impure code)函数中的纯代码部分(pure code)抽离出来形成独立的另一个纯函数。我们通过代码抽离把不纯代码逐步向外推并在程序里形成一个纯代码核心(pure core)。我们可以顺利地
2015-06-30 15:02:40 755
原创 泛函编程(31)-泛函IO:Free Monad-Running free
在上节我们介绍了Free Monad的基本情况。可以说Free Monad又是一个以数据结构替换程序堆栈实例。实际上Free Monad的功能绝对不止如此,以heap换stack必须成为Free Monad的运算模式,这样我们才可以放心的使用Free Monad所产生的Monadic编程语言了。前面我们介绍了Trampoline的运算模式可以有效解决堆栈溢出问题,而上节的Free Monad介绍里
2015-06-23 16:55:15 813
原创 泛函编程(30)-泛函IO:Free Monad-Monad生产线
在上节我们介绍了Trampoline。它主要是为了解决堆栈溢出(StackOverflow)错误而设计的。Trampoline类型是一种数据结构,它的设计思路是以heap换stack:对应传统递归算法运行时在堆栈上寄存程序状态,用Trampoline进行递归算法时程序状态是保存在Trampoline的数据结构里的。数据结构是在heap上的,所以可以实现以heap换stack的效果。
2015-06-11 09:31:08 699
原创 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow
泛函编程方式其中一个特点就是很多地方都会使用递归算法,甚至有些地方还无法避免。比如说flatMap就是一种推进式的递归算法,没了它就无法使用for-comprehension,那么泛函编程也就无法被称为Monadic Programming了。虽然递归算法能使代码更简洁易明,但同时又以占用堆栈(stack)方式运作。堆栈是软件程序有限资源,所以在使用递归算法对大型数据源进行运算时系统往往会出现St
2015-06-09 10:03:50 883
原创 泛函编程(28)-粗俗浅解:Functor, Applicative, Monad
经过了一段时间的泛函编程讨论,始终没能实实在在的明确到底泛函编程有什么区别和特点;我是指在现实编程的情况下所谓的泛函编程到底如何特别。我们已经习惯了传统的行令式编程(imperative programming),总是先入为主的认为软件编程就是一行接着一行的更改某些变量状态指令:明刀明枪,字里行间目的和方式都很明确。我们就以一步步更改程序状态的方式,一行一行的拼凑指令:这就是典型的行令式编程了。
2015-06-02 07:27:41 930
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人