Jason Ding的专栏

Technician => Scientist => Philosopher => Artists

排序:
默认
按更新时间
按访问量

【函数式】纯函数与替代模型

纯函数一个函数在程序执行的过程中除了根据输入参数给出运算结果之外没有其他的副作用影响,我们可以把这类函数称为“纯函数”。纯函数由于不依赖外部变量,使得给定函数输入其返回结果永远不变,比如整数的加法函数,它接收两个整数值并返回一个整数值,对于给定的两个整数值,它的返回值永远是相同的整数值。副作用相对...

2016-05-27 11:07:10

阅读数:3679

评论数:1

【Scala】响应式编程思想

何为响应式编程响应式编程是一种面向数据流和变化传播的编程范式,数据更新是相关联的。 这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。 以响应式编程方式进行思考,意味着要放弃命令式且带状态的编程习惯,并且强迫你的大脑以一种不同的方式去工作...

2016-05-15 19:47:31

阅读数:3386

评论数:0

【Scala】Vector内部结构与内存共享原理

Scala不可变集合Scala不可变集合的设计目标是提供高效又安全的实现。这些集合中的大部分都是用高级技巧来在集合的不同版本之间“共享”内存。其中较长使用到的是Vector和List。 在一般的编程任务中,不可变集合有很多超出可变集合的优点。尤其重要的一点是不可变集合可以在多线程之中共享而无需加...

2016-05-11 20:48:16

阅读数:7537

评论数:4

【Scala-ML】使用Scala构建机器学习工作流

引言在这一小节中,我将介绍基于数据(函数式)的方法来构建数据应用。这里会介绍monadic设计来创建动态工作流,利用依赖注入这样的高级函数式特性来构建轻便的计算工作流。建模过程在统计学和概率论中,一个模型通过描述从一个系统中观察到的数据来表达任何形式的不确定性,模型使得我们可以用来推断规则,进行预...

2016-03-19 20:34:19

阅读数:5908

评论数:1

【Scala-ML】如何利用Scala构建并行机器学习系统

引言在学习Scala的过程中,我发现其在构建大规模分布式计算系统上有与生俱来的特质。其丰富的类型系统可以帮助编程设计提供很好的信息隐藏和抽象,其monoids和monads概念利用Scala高阶函数实现计算并行和数据处理流水线,其Actor系统帮助编写可伸缩性的应用程序,其实现特定领域语言的优势帮...

2016-03-19 20:33:35

阅读数:5309

评论数:0

【Scala类型系统】自身类型(self type)引用

定义特质可以要求混入它的类扩展自另一个类型,但是当使用自身类型(self type)的声明来定义特质时(this: ClassName =>),这样的特质只能被混入给定类型的子类当中。 如果尝试将该特质混入不符合自身类型所要求的类时,就会报错。从技术角度上看,自身类型是在类中提到this时...

2016-03-17 22:38:01

阅读数:4656

评论数:0

【Scala】Cake模式和依赖注入

依赖注入(Dependency Injection)和控制反转(Inversion of Control)Dependency Injection & Inversion of Control是Martin Fowler在2004年所提出來的一个概念,Martin Fowler在这篇文章中...

2016-03-11 22:06:27

阅读数:4198

评论数:0

【Scala】抽取器

引子由于样本类和构造器模式相关联,所以在模式匹配中常使用样本类做数据的解构和分析。 有些情况下,或许希望能够在不创建关联的样本类的前提下编写出类似的模式匹配,此时抽取器(Extractor)可以用来定义与对象表达解耦的模式。抽取email地址的例子问题假设你需要分析一些代表email地址的字符串...

2016-03-10 17:12:54

阅读数:3719

评论数:2

【函数式】Monads模式初探——for解析式

for表达式是monad语法糖先看一组示例:case class Person(name: String, isMale: Boolean, children: Person*)val lara = Person("Lara", false) val bob = Person(...

2016-03-05 21:15:41

阅读数:3126

评论数:0

【函数式】Monads模式初探——Option Monad

Option MonadScala中的Option是一个Monad实现。 Option的简化版定义如下:sealed abstract class Option[+A] { def isEmpty: Boolean def get: A def map[B](f: A => B):...

2016-03-05 21:14:51

阅读数:2664

评论数:0

【函数式】Monads模式初探——Monad概念

单子单子(Monad)是一种将函子组合应用的方法。在计算机科学里,单子经常用来代表计算(computation)。单子能用来把与业务无关的通用程序行为抽象出来,比如有用来处理并行(Future)、异常(Option和Try等)、甚至副作用的单子。 单子的flatMap和unit操作作为构建数据类...

2016-03-05 21:14:00

阅读数:5979

评论数:0

【函数式】Monads模式初探——Endofunctor

自函子自函子(Endofunctor)是一个将范畴映射到自身的函子(A functor that maps a category to itself)。函子是将一个范畴转换到另一个范畴,所以自函子是一种特殊的函子。 由三部分组成: 一组元素对象 一组态射 态射组合(二元运算) ...

2016-03-01 10:53:28

阅读数:2751

评论数:0

【函数式】Monads模式初探——Functor

函子与范畴函子(functor)是从一个范畴到另一个范畴的转换,并且其亦可转换/保持态射(morphism)。 一个态射是从一个范畴里的一个值到同一个范畴里的另一个值的变换。在猫的范畴的例子里,一个态射好比一个盒子,能够把黯淡无光的猫转化为一个霓虹闪耀的猫。在类型的范畴里(计算机科学常用的范畴)...

2016-02-29 21:33:18

阅读数:3142

评论数:0

【函数式】Monads模式初探——Monoids

Monads是什么知乎里有关于什么是Monad的问题讨论,而在维基百科中也有关于Monad的释义。作为初次接触到Monads概念,难免会有些晕头转向,也难免会有些畏惧(因为Monads和数学中的范畴论有密切关系),但是Monads又是如此的重要,因为它在函数式编程中实在是应用太广泛了,并且在Sca...

2016-02-28 21:36:14

阅读数:3710

评论数:1

【Scala类型系统】隐式转换与隐式参数

隐式转换隐式转换是使用implicit修饰的带有单个参数的普通函数。这种函数将自动应用,将值从一种类型转换为另一种类型。 举例说明: 我们想将整数n转换为分数n/1, 定义implicit def int2Fraction(n: Int) = Fraction(n, 1) 在进行...

2016-02-27 21:35:31

阅读数:2635

评论数:0

【Scala类型系统】函数式Queue的简易实现

实现一个函数式Queue泛型类函数式队列是一种具有以下三种操作方式的数据结构: head 返回队列的第一个元素 tail 返回除第一个元素之外的队列 append 返回尾部添加了指定元素的新队列 如果Queue是一个不变队列,也就是函数式队列。在添加元素的时候不会改变其内...

2016-02-27 21:34:38

阅读数:2428

评论数:0

【Scala类型系统】类型参数化和变化型注解

引言类型参数化(Parameterized Types)可以用来编写泛型类和特质,比如定义Set[T],这使得我们可以创建诸如Set[String]的类型。而变化型注解(Variance Annotation)定义了参数化类型的继承关系,比如Set[String]是Set[AnyRef]的子类型。...

2016-02-27 21:33:32

阅读数:3461

评论数:0

【Akka】Actor模型探索

Akka是什么Akka就是为了改变编写高容错性和强可扩展性的并发程序而生的。通过使用Actor模型我们提升了抽象级别,为构建正确的可扩展并发应用提供了一个更好的平台。在容错性方面我们采取了“let it crash”(让它崩溃)模型,人们已经将这种模型用在了电信行业,构建出“自愈合”的应用和永不停...

2016-01-21 15:15:52

阅读数:4803

评论数:0

【Akka】在并发程序中使用Future

引言在Akka中, 一个Future是用来获取某个并发操作的结果的数据结构。这个操作通常是由Actor执行或由Dispatcher直接执行的. 这个结果可以以同步(阻塞)或异步(非阻塞)的方式访问。 Future提供了一种简单的方式来执行并行算法。Future直接使用Future中的一个常见用例...

2016-01-21 15:08:36

阅读数:6780

评论数:2

【Akka】Akka中actor的生命周期与DeathWatch监控

Actor的生命周期在Actor系统中的路径代表一个“地方”,这可能被一个存活着的的actor占用着。最初,路径(除了系统初始化角色)是空的。当actorOf()被调用时,指定一个由通过Props描述给定的路径角色的化身。一个actor化身由路径和一个UID确定。重新启动仅仅交换Props定义的A...

2016-01-19 11:34:43

阅读数:1901

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭