上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 29 下一页
摘要: 我们不断地重申FP强调代码无副作用,这样才能实现编程纯代码。像通过键盘显示器进行交流、读写文件、数据库等这些IO操作都会产生副作用。那么我们是不是为了实现纯代码而放弃IO操作呢?没有IO的程序就是一段烧CPU的代码,没有任何意义,所以任何类型的程序都必须具备IO功能,而在FP模式中对IO操作有特别的 阅读全文
posted @ 2016-05-10 18:56 雪川大虫 阅读(811) 评论(0) 推荐(0)
摘要: 在上一篇讨论里我在设计示范例子时遇到了一些麻烦。由于Free Monad可能是一种主流的FP编程规范,所以在进入实质编程之前必须把所有东西都搞清楚。前面遇到的问题主要与scalaz Free的FreeC类型有关系。这个类型主要是针对一些非Functor的F[A]特别设计的。FreeC是Coyoned 阅读全文
posted @ 2016-04-26 12:29 雪川大虫 阅读(848) 评论(0) 推荐(1)
摘要: 一直感觉FP比较虚,可能太多学术性的东西,不知道如何把这些由数学理论在背后支持的一套全新数据类型和数据结构在现实开发中加以使用。直到Free Monad,才真正感觉能用FP方式进行编程了。在前面我们已经花了不小篇幅来了解Free Monad,这次我想跟大家讨论一下用Free Monad来编写一个真正 阅读全文
posted @ 2016-04-18 11:17 雪川大虫 阅读(2767) 评论(0) 推荐(0)
摘要: 很多函数式编程爱好者都把FP称为Monadic Programming,意思是用Monad进行编程。我想FP作为一种比较成熟的编程模式,应该有一套比较规范的操作模式吧。因为Free能把任何F[A]升格成Monad,所以Free的算式(AST)、算法(Interpreter)关注分离(separati 阅读全文
posted @ 2016-04-12 11:14 雪川大虫 阅读(744) 评论(0) 推荐(0)
摘要: 我一直在不断的提示大家:FP就是Monadic Programming,是一种特殊的编程风格。在我们熟悉的数据库编程领域能不能实现FP风格呢?我们先设计一些示范例子来分析一下惯用的数据库编程过程: 我这里模拟了一个培训学校内的一些业务。上面设计的是一些基本函数,可以分别对学员、导师、座位进行查询和更 阅读全文
posted @ 2016-03-30 12:25 雪川大虫 阅读(611) 评论(0) 推荐(0)
摘要: 在上面几期讨论中我们连续介绍了Free Monad。因为FP是纯函数编程,也既是纯函数的组合集成,要求把纯代码和副作用代码可以分离开来。Free Monad的程序描述(AST)和程序实现(Interpretation)关注分离(separation of concern)模式恰恰能满足FP要求。我们 阅读全文
posted @ 2016-03-28 11:46 雪川大虫 阅读(547) 评论(0) 推荐(0)
摘要: 在前面几次讨论中我们介绍了Free是个产生Monad的最基本结构。它的原理是把一段程序(AST)一连串的运算指令(ADT)转化成数据结构存放在内存里,这个过程是个独立的功能描述过程。然后另一个独立运算过程的Interpreter会遍历(traverse)AST结构,读取结构里的运算指令,实际运行指令 阅读全文
posted @ 2016-03-25 21:18 雪川大虫 阅读(566) 评论(0) 推荐(0)
摘要: 我们说过自由数据结构(free structures)是表达数据类型的最简单结构。List[A]是个数据结构,它是生成A类型Monoid的最简单结构,因为我们可以用List的状态cons和Nil来分别代表Monoid的append和zero。Free[S,A]是个代表Monad的最简单数据结构,它可 阅读全文
posted @ 2016-03-23 09:49 雪川大虫 阅读(552) 评论(0) 推荐(0)
摘要: 在任何模式的编程过程中都无法避免副作用的产生。我们可以用F[A]这种类型模拟FP的运算指令:A是可能产生副作用的运算,F[_]是个代数数据类型ADT(Algebraic Data Type),可以实现函数组合(functional composition),我们可以不用理会A,先用F[_]来组合形成 阅读全文
posted @ 2016-03-19 15:46 雪川大虫 阅读(579) 评论(0) 推荐(0)
摘要: 在前面的讨论里我们提到自由数据结构就是产生某种类型的最简化结构,比如:free monoid, free monad, free category等等。我们也证明了List[A]是个free monoid。我们再看看free monad结构Free的定义:scalaz/Free.scala 我们在上 阅读全文
posted @ 2016-03-18 08:12 雪川大虫 阅读(796) 评论(0) 推荐(1)
上一页 1 ··· 17 18 19 20 21 22 23 24 25 ··· 29 下一页