240 发简信
IP属地:辽宁
  • 语法分析器组合子

    什么是语法分析器?语法分析器是一种特别的程序,接受非结构化数据(比如文本,任何类的符号、数字或者字符流)作为参数,输出结构化的数据作为结果。例如将CSV文件转化为二维数组,将...

  • 基于性质的测试

    在Scala社区,Scala是基于性质测试库的实现之一。在本章我们将实现一个自己的测试库,我们需要学习设计一个库应该做出哪些取舍,又应该总结其中的一些设计思路。首先在设计AP...

  • 纯函数式的并行计算(2)

    在上章节中我们介绍了如何使用java.util.current中的API来实现Par:这种纯函数式的并行计算结构,但是最后我们也提出了这个实现存在一个bug,那就是在固定线程...

  • 纯函数式的并行计算(1)

    现在计算机往往都有多个CPU,每个CPU都有多个核,因此程序能否利用他们呢的并行处理能力就显得十分重要了。但是并行程序之间的交互十分复杂,特别是以共享内存这种传统方式实现线程...

  • 纯函数式状态(2)

    在上一个章节中我们完成如下组合子:unit,map,map2,flatMap,sequence和traverse。这些组合子并不是为处理随机状态而存在的。他们都是处理状态的通...

  • 纯函数式状态(1)

    纯函数应该如何来处理状态?我们可以先从生成随机数这个例子开始下手,先来看下如何以副作用的方式来生成随机数: 从上面的代码可以推断出rng对象中一定维护着一个状态,每次调用ne...

  • 严格求值和惰性求值-无限流与共递归

    所谓无限流指的就是长度无限的流,但是无限流并不会将内存吃光,他只是对于表达式的描述,他是惰性的,甚至一个Stream在真正应用前他所占用的内存是可以忽略的。所以我们完全可以使...

  • 严格求值和惰性求值-Stream

    再之前介绍函数式数据结构的章节中我们介绍了List这种数据结构,其中我们再List中实现了map,flatMap,filter等方法,他们会接受一个函数并返回一个新的List...

  • 不用异常来处理错误-Validated

    在上一章节中我们介绍了Either的实现,在使用Either来校验输入的例子中我们提到了Either的一个缺陷,那就是Either只能收集一次错误信息,收集完就返回错误信息了...

  • 不用异常来处理错误-Either

    在上一章节中我们提到了用Option来处理错误,Option来处理错误非常简单,但是其中也存在一个问题就是Option过简单。他不能携带错误信息,以至于我们不能针对不同的错误...

  • 不用异常来处理错误-Option

    在函数式编程范式中为什么不用异常类处理错误?因为使用异常存在两个缺点: 异常破坏了引用透明并引入了上下文依赖 异常不是类型安全的 那在函数式编程模式中应该如何处理异常呢?在C...

  • 函数式数据结构-Tree

    代数类型(ADT)是又一个或者多个数据构造器构(data construct)所定义的数据类型,每个数据类型包含另个或者多个参数。数据类型是其数据构造器的累加(sum)或者联...

  • 函数式数据结构-List(2)

    我们先回顾下上文中利用模式匹配和递归调用实现的sum方法和product方法: 假如抛弃product方法中的短路设计,两者实现的形式是完全一样的。那么是否可以抽象一个更为泛...

  • 函数式数据结构-List(1)

    什么是函数式数据结构?函数式数据结构式只能被纯函数操作的数据结构,纯函数是不能修改数据结构的也不能产生副作用。函数式数据结构有什么特点?函数式数据结构最大的特点就是其被定义为...

  • 在Scala中使用函数式编程(2)

    多态函数:基于类型的抽象 在上文中我们写函数都是单态的,也即是函数只能操作一种数据类型,例如abs,factorial2,fib1只能操作Int类型,formatResult...

  • 在Scala中使用函数式编程(1)

    从本节开始我们会介绍如何使用Scala进行函数编程,在这之前希望你能对Scala的基础语法有所了解。其中我们会接触一些语法概念,例如: 尾递归函数(tail recusive...

  • 什么是函数式编程

    函数式编程概念 什么是函数式编程?只用纯函数来构造程序就称为函数式编程 什么是纯函数?没有副作用的函数称为纯函数 什么是副作用?除去函数本身的作用外没有其他的作用。带副作用的...