Functional Programming
叶玄青
我是谁
展开
-
Haskell lesson:类型系统解读
最近忙成狗了,吭哧吭哧终于把家搬完了,以后就长久的住在新家了,由于刚搬家,网线还没有接,又过了一个星期家里没网的日子。这一段时间又没时间好好整理haskell。甚是遗憾。从上次haskell实现Graham扫描算法到现在已经三周有余,这次分析一下haskell类型系统。首先回忆一下C语言是怎么构造新类型的。struct Test { int index;#define NAME_LEN 3原创 2017-11-14 21:36:54 · 1081 阅读 · 0 评论 -
Haskell lesson:实现Graham扫描算法
getMinDot :: (Num a, Ord a) => [(a,a)] -> (a,a)getMinDot ((x,y):pairs) = if pairs == [] then (x,y) else if or [yand [y==snd (getMinDot pairs), x<fst (getMinDot pairs)]] then (x,y) else getM原创 2017-10-18 13:41:46 · 3670 阅读 · 5 评论 -
Haskll Lesson:Huffman编码实现文本压缩
Haskell实战演练:实现哈夫曼编码一、Huffman编码理论学习资料https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1126/handouts/220%20Huffman%20Encoding.pdf基本内容概述:huffman编码是一种变长编码方式,向我们熟悉的ascii码是定长编码的一种,冗余信息较多。变长编码的基本思路是高频率原创 2017-12-10 00:57:26 · 877 阅读 · 0 评论 -
Haskell Lesson:高阶函数
微信公众号:牛顿一号 欢迎关注我,一起学习,一起进步!前面在实现Graham扫描和Huffman编码的时候其实已经用到了高阶函数的知识。所谓高阶函数就是参数中带有函数,譬如 f2(x)f^2(x)。通过高阶函数可以进一步对运算过程进行抽象。一、foldl/foldr/map这几个函数提供了一种遍历List的方法,可以不用自己去显示的定义递归过程,即所谓的折叠和映射。折叠返回一个累加值,这个原创 2017-12-24 21:39:05 · 620 阅读 · 0 评论 -
Haskell Lesson:一些数学知识
补充一些数学知识一、幺半群(monoids)1.1 定义一种元素构成幺半群只需满足两个条件:能找到一个满足结合律的二元操作符,称之为(*),使得表达式a * (b * c) = (a * b) * c。存在一个单位元素,称为e,满足群的任意元素有:a * e = a且e * a = a操作*和单位元e以及所有满足这两个条件的元素构成了幺半群。1.2 举例一:* = * (乘法符号)e = 1那么所原创 2018-01-15 22:24:57 · 860 阅读 · 0 评论 -
Haskell Lesson:a tokenizer
一、关于pure和impureHaskell作为一门纯函数式语言,副作用剥离是它的一大特色,基本上较为严格的遵循数学函数的形式。但是也带来了一些问题,譬如在实现一个文本编辑器的时候,需要把token记录下来,这个问题在C语言中很容易解决,搞个静态的变量即可,但是在Haskell中就没有那么容易了。可能需要这么做:getToken >>= \s -> return (s:tokenList)原创 2018-01-28 17:33:32 · 629 阅读 · 0 评论 -
复用 = 高阶函数和多态
高阶函数假设现在有一个计算销售额的函数,输入年份n,返回该年的销售额。sales :: num -> num我们可以这样定义一个计算总销售额的函数totalSales :: num -> numtotalSales 0 = 0totalSales n = totalSales (n-1) + sales (n-1)定义高阶函数total :: (num -> num) ->...原创 2018-03-26 23:45:24 · 623 阅读 · 0 评论 -
Haskell Monad (上)
函数式编程中的单子(Monad)说到pure functional programming,实在是绕不过去Monad的。pure function的特点往往用函数式编程的思路写了几个程序之后就会遇到一个问题:针对具有状态更新的程序,似乎总是不太好处理。由于语言的纯粹性,相同的输入总是返回一样的值,所以如果在计算过程中需要更新一个状态,就要去显式地把状态作为参数传递给函数,并显式地构...原创 2018-05-04 09:12:25 · 1366 阅读 · 0 评论