随笔分类 -  函数式编程

Functional programming && F#
摘要:目录 "编写基于Property based的单元测试" "使用FsCheck编写Property based测试" "在Xunit中使用FsCheck" 使用FsCheck编写Model based测试 待续 无论是Xunit还是Nunit都有额外的扩展用来编写FsCheck测试,以Xunit为例 阅读全文
posted @ 2019-03-10 19:01 .NET西安社区 阅读(437) 评论(0) 推荐(0) 编辑
摘要:使用FsCheck编写Property based的测试 在 "编写基于Property based的单元测试" 一文中,我们介绍了什么是Property based测试。同时我们也总结了Property based测试的两个策略: 随机产生若干个输入值,保证足够多的测试用例 断言被测代码具有普遍适 阅读全文
posted @ 2019-03-09 16:52 .NET西安社区 阅读(496) 评论(0) 推荐(1) 编辑
摘要:Bind函数 Bind函数在函数式编程中是如此重要,以至于函数式编程语言会为bind函数设计语法糖。另一个角度Bind函数非常难以理解,几乎很少有人能通过简单的描述说明白bind函数的由来及原理。 这篇文章试图通过“人话”来描述bind函数,并通过浅显的实例为零函数式编程语言的开发者揭秘bind函数 阅读全文
posted @ 2018-09-21 08:31 .NET西安社区 阅读(867) 评论(0) 推荐(4) 编辑
摘要:回顾上一节,为了丰富建模类型,编程语言引入了泛型,例如Optional<T>,Result<T>等。我们把泛型也叫做类型提升(lifting),这样带来的问题是以往的函数不能再适应提升类型,试想之前已经存在一个a >b的函数,但是此时你拥有一个E<a>变量, 阅读全文
posted @ 2018-08-19 20:45 .NET西安社区 阅读(741) 评论(0) 推荐(0) 编辑
摘要:如果问C 这门语言那些特性是非常好的设计,那么泛型肯定是其中一个。泛型的引入间接带来了LINQ,大家大概都享受过LINQ带来的快感。泛型这个特性来自于函数式语言, "F 的设计者Don syme参与了.NET中的泛型设计" 。C 中的泛型特性使用起来也很简单,以至于没有任何函数式基础就能把LINQ耍 阅读全文
posted @ 2018-08-09 08:36 .NET西安社区 阅读(1094) 评论(0) 推荐(1) 编辑
摘要:模式匹配在F 是非常普遍的,用来对某个值进行分支匹配或流程控制。 模式匹配的基本用法 模式匹配通过match...with表达式来完成,一个完整的模式表达式长下面的样子: 当你第一次使用模式匹配,你可以认为他就是命令式语言中的switch...case或者说是if...else if...else。 阅读全文
posted @ 2018-07-29 23:43 .NET西安社区 阅读(2781) 评论(0) 推荐(1) 编辑
摘要:在深入到函数式编程思想之前,了解函数式独有的类型是非常有必要的。函数式类型跟OO语言中的数据结构截然不同,这也导致使用函数式编程语言来解决问题的思路跟OO的思路有明显的区别。 什么是类型?类型在编程语言中有什么作用呢?一般来说,类型有两个作用: 1. 首先当你对某个数据声明类型后,就拥有了编译时的检 阅读全文
posted @ 2018-07-28 15:29 .NET西安社区 阅读(1307) 评论(0) 推荐(1) 编辑
摘要:众多语言都会设计Option类型,例如Java 8和Swift都设计了Optional类型。其实这种类型早就出现在了函数式语言中,在OCaml和Scala中叫Option,在Haskell中叫Maybe。Option类型是为了解决了什么样的问题呢? null的局限性 你一定写过类似的C 代码: cs 阅读全文
posted @ 2018-07-18 22:08 .NET西安社区 阅读(1512) 评论(0) 推荐(2) 编辑
摘要:组合 函数式编程的核心在于 ,其中之一就是如何组合函数。我们在Currying一文就提到过组合,我们当时是这样描述的:只有一个输入和一个输出的函数才能完成组合,当然并不是所有的函数都只有一个输入,Currying可以帮助我们把多个输入参数的函数变成只有一个输入的函数。 那么到底什么是组合,怎么组合? 阅读全文
posted @ 2018-07-18 00:15 .NET西安社区 阅读(1160) 评论(3) 推荐(0) 编辑
摘要:是时候介绍如何在F 中定义函数了,在你没有接触过函数式编程语言之前,你也许会觉得C /Java的语法已经够丰富了,有什么任务做不了呢?当你读过 "函数式编程之Currying" 和 "函数式编程之Partial application" ,你就会发现C 在函数式编程方面已经略显无力了,虽然我用C 模 阅读全文
posted @ 2018-07-14 18:39 .NET西安社区 阅读(381) 评论(0) 推荐(1) 编辑
摘要:上一篇关于Currying的介绍,我们提到F 是如何做Currying变换的: 给定一个接受三个参数的函数 ,我们通过 这样的方式创建出了一个新的函数 ,其函数签名为: 上面是F 用来描述函数签名的方式,它表示函数接受两个int类型的参数,返回类型为int类型。 类似地: 表示参数为 类型的函数,返 阅读全文
posted @ 2018-07-10 23:32 .NET西安社区 阅读(514) 评论(0) 推荐(1) 编辑
摘要:这个系列涉及到了F 这门语言,也许有的人觉得这样的语言遥不可及,的确我几乎花了2 3年的时间去了解他;也许有人觉得学习这样的冷门语言没有必要,我也赞同,那么我为什么要花时间去学习呢?作为一门在Tiobe排行榜里50名开外的语言,很显然我学习他并不是为了指着F 混口饭吃,也许有一天我会为了养家糊口转向 阅读全文
posted @ 2018-07-06 09:31 .NET西安社区 阅读(657) 评论(6) 推荐(3) 编辑
摘要:大量讲解函数式编程语言的书籍最终都会用Fuctor,Monad,Monoids,范畴论等各种词汇吓退命令式语言玩家,所以我试图避开这些问题,揭开这些复杂词汇带来的具有实战意义的成果。另外我会尽量使用C 语言来描述函数式编程思想,因为C 某些语法和特性来自于函数式语言的启发,但C 终究并不是正统的函数 阅读全文
posted @ 2018-07-03 23:42 .NET西安社区 阅读(777) 评论(0) 推荐(1) 编辑
摘要:本文将描述函数式编程的基本理论,从而让你理解什么是函数式编程,同时也会展示“函数式编程”和“面向对象”这两种不同风格的编程范式之间的区别。本文是函数式编程系列的入门篇,后续文章陆续会发出。 什么是函数 函数式编程背后的理论依据是数学,数学函数背后有一系列有意思的特点,而函数式编程语言则试图模拟这些特 阅读全文
posted @ 2018-07-02 23:43 .NET西安社区 阅读(890) 评论(2) 推荐(0) 编辑

点击右上角即可分享
微信分享提示