范畴论基本概念 如果你是第一次听说范畴论(category theory),看到这高大上的名字估计心里就会一咯噔,到底数学威力巨大,光是高等数学就能让很多人噩梦连连.和搞编程的一样,数学家喜欢将问题不断加以抽象从而将本质问题抽取出来加以论证解决,范畴论就是这样一门以抽象的方法来处理数学概念的学科,主要用于研究一些数学结构之间的关系及联系. 在范畴论里,一个范畴(category)指的是这样一个好东西,它由三部分组成: 一系列的对象(object). 一系列的态射(morphism). 一个组合(…
说到 Haskell,这真是一门逼格极高的编程语言,一般初学者如果没有相关函数式编程的经验,入门直接接触那些稀奇古怪的概念,简直要跪下.现在回想起来,隐隐觉得初学者所拥有的命令式编程语言(imperative programming language)相关的知识和经验反而成了负担,若能抛掉以往固有的观念转以全新的视角来看待这些新奇东西,仿佛会更好接受些,真是莫名其妙. Bartosz Milewski 在其博客上写了不少 Haskell 及函数式编程相关的文章,读来真是受益良多,这位大哥很多年前…
函数系统 函数式编程当然少不了函数系统啦,在教程最初的时候就有一个最简单的函数,函数系统贯穿在Haskell全部,Haskell的函数有几个重要的性质. 首先声明一下函数的参数和返回值类型 然后有一个很重要写法就是匹配,用匹配来匹配参数,所以Haskell的函数写法和其他语言不一样,同样一个函数可能有几种表达形式 模式匹配 函数匹配的一个例子,比如有这么一个函数,当用户输入7时显示输入了七,否则显示没输入7. lucky :: (Integral a) => a -> String lucky…
Haskell functions can take functions as parameters and return functions as return values. A function that does either of those is called a higher order function. Higher order functions aren't just a part of the Haskell experience, they pretty much ar…
在学习haskell 记录以下常用的函数 随时更新! span  span :: (a -> Bool) -> [a] -> ([a], [a]) span, applied to a predicate p and a list xs, returns a tuple where first element is longest prefix (possibly empty) of xs of elements that satisfy p and second element is…
原文地址:Haskell学习-函数式编程初探   为什么要学习函数式编程?为什么要学习Haskell?   .net到前端,C#和JavaScript对我来说如果谈不上精通,最起码也算是到了非常熟悉的程度.这两门语言就像是我的盾牌和宝剑,给我保驾护航,开山劈石,伴随着我不断成长.同时C#和JavaScript它们本身也在不断地进化,不断出现越来越多方便的语法糖,但追根到底很多都是从函数式语言汲取的精华.比如高阶函数,lambada表达式,柯里化等.   于是从探险的角度,以好奇的心态开始学习函数…
<Haskell趣学指南> 基本信息 原书名:Learn You a Haskell for Great Good!: A Beginner's Guide 原出版社: No Starch Press 作者: (斯洛文尼亚)Miran Lipovaca 译者:李亚舟 宋方睿 丛书名:新锐编程语言集萃 出版社:人民邮电出版社 ISBN:9787115335593 上架时间:2013-12-28 出版日期:2014 年1月 开本:16开 页码:301 版次:1-1 所属分类:计算机 > 软件…
函数模板 函数模板的目的 设计通用的函数,以适应广泛的数据型式 函数模板的定义格式 template<模板型式参数列表>返回值型式 函数名称(参数列表): 原型:template<class T> void Swap(T &a, T&b); 实现:template<class T> void Swap(T &a , T&b){...} 函数模板的体化与特化 针对特定型参数,在声明或第一次调用该函数模板时体化 每次体化都形成针对特定型参数的…
Algebraic Data Types 入门 在前面的章节中,我们谈了一些 Haskell 内置的类型和 Typeclass.而在本章中,我们将学习构造类型和 Typeclass 的方法. 我们已经见识过许多类型,如 Bool.Int.Char.Maybe 等等,不过在 Haskell 中该如何构造自己的类型呢?好问题,一种方法是使用 data 关键字.首先我们来看看 Bool 在标准函式库中的定义: data Bool = False | True data 表示我们要定义一个新的类型.= …
装载模块 Haskell 中的模块是含有一组相关的函数,类型和类型类的组合.而 Haskell 进程的本质便是从主模块中引用其它模块并调用其中的函数来执行操作.这样可以把代码分成多块,只要一个模块足够的独立,它里面的函数便可以被不同的进程反复重用.这就让不同的代码各司其职,提高了代码的健壮性. Haskell 的标准库就是一组模块,每个模块都含有一组功能相近或相关的函数和类型.有处理 List 的模块,有处理并发的模块,也有处理复数的模块,等等.目前为止我们谈及的所有函数,类型以及类型类都是 P…