脑洞时间:为什么世界上有那么多程序语言,那是腐朽的资本主义为了增加广大人民学习成本以及编译原理太过普及造成的,建议大学取消编译原理的一切课程,并挥起奥姆休的剃刀,把所有程序语言统统踢了,除机器语言外只留下两种语言:汇编和haskell(逃
 
简明扼要的写一点haskell 好玩的东西
 
首先是一些基本操作,命令行按ghci进入,一些基本操作前面用冒号,用惯vim的人应该很熟悉,比如
:quit 退出
:t 显示变量的类型(char,int之类的)
:l 链接外面写好的函数文件,事实上这种模式不能自己写函数,必须在外面写好后再link进来才能用
 
 
  首先很精彩的便是list,list和python里的list或是其它语言中的array有点像,用一对方括号括起来,比如[1,5,2,2] ["xin","ru","zhang"]
然后就是和python不一样的了,haskell能够猜,比如[1..5]表示[1,2,3,4,5] [1,3..9]表示[1,3,5,7,9]前面两个元素以及最后的元素,haskell便能自动判断并填充步长,此外惰性求值也是haskell有别于python的地方 比如我可以不写最后一个元素[1..]表示的就是[1,2,3,4,5,........]所有自然数,它的元素个数是无限的,但是haskell不会傻到把无限的数放到内存里,而是放着不管它,等到要用的时候再计算
  然后就是list的一个大杀器了,你让一个高中生写一个正奇数的集合,那么可能是这样写:{2*k-1| k>=1} 如果用C语言之类的写呢,一般会这么写:for(int i = 1;i <= MAXN ; i++)oddArray[i] = 2 * i - 1; 然后如果用haskell写可以是这样的 [2 * k - 1 | k <- [1..]] woc!!!还可以加限制条件比如要找除7余数为1的奇数可以这么写: [2 * k - 1 | k <- [1..] , (2 * k - 1) `mod` 7 == 1] 相比之下其它写法真是low爆了!
 
 
  第二件萌萌哒事就是,haskell并没有循环!haskell并没有循环!haskell并没有循环!重要的事要说三遍.事实上函数式编程是基于和图灵机等价的lambda演算的,所以请不要把它看作这个PC的生物!所以呢只能靠萌萌哒递归来处理了,举个栗子,要求一个list中最大的元素, let a = [1,5,6,2],当然有系统提供的函数maximum,直接maximun a就可以,但是如何自己造这个轮子呢,可以写成这样:
max' [x] = x
max' (x:xs)
|x > max' xs = x
|otherwise = max' xs
嘛,反正haskell会从上到下匹配,所以如果把递归上面那么就有神奇的左递归出现...
max'是函数名haskell 允许在函数名后加个'来区分哪些功能只差一点的函数,而不是max1,max2,max3...maxinf 
这个很好理解当list中只有一个元素时最大值就是本身,否则就等于第一个元素和数组中剩下元素最大值的最大值,翻译成C应该是这个样子:
int max(std::vector<int> Arr, int k)//求数组Arr[]第k个元素开始到最后一个元素的最大值
{
if(k+1 == Arr.size())return Arr[k];
int leftMax = max(Arr , k+1);
if(leftMax > Arr[k])return leftMax;
else return Arr[k];
}
 
同理求list里所有element的和可以这么写
sum' [x] = x
sum' (x:xs) = x + sum' xs
 
 
 
 
如果说以上那么多废话都是helloworld水平半小时内看下书就可以学会的东西的话,那看到下面这个东西才是真正让我觉得有记录必要的东西,快排!
sort' []=[]
sort' [x] = [x]
sort' (x:xs)=sort'[y|y<-xs,y<=x]++[x] ++ sort'[y|y<-xs,y>x]
 
 
 
 
这个姿势的快排美爆了啊,那些C++2min 1min敲完的手速狗门快哭了啊!!有木有!!接触haskell俩小时,印象就是递归写的东西这货写都很美!!

haskell 乱搞笔记[原创]的更多相关文章

  1. haskell 乱搞(2)之 Y-conbinator [原创]

    Y-conbinator"有没有用"?并没有,在大多数支持函数式编程的语言里,你可以自由的使用递归,而这货只是作为理论基石弥散在函数式编程的血肉之中 这是数学笔记,这是数学笔记,这 ...

  2. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  3. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  4. bitset 的妙用:乱搞字符串匹配

    最近碰到了几次 bitset 乱搞字符串匹配的情况,故写文以记之. 1. 算法简介 核心思想:假设文本串为 \(s\),则对字符集中的每一个字符 \(c\) 开一个大小为 \(|s|\) 的 bits ...

  5. URAL 1827 Indigenous Wars(排序、乱搞)

    题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...

  6. UVA 11853 [dfs乱搞]

    /* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...

  7. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  8. 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

  9. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

    3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 159[Submit][Status][ ...

随机推荐

  1. java.lang.IllegalAccessException: Class XX can not access a member of class XXX with modifiers "private static"

    当前需求: 利用反射获取某一属性值运行结果:java.lang.IllegalAccessException: Class com.example.demo.test.Reflect can not ...

  2. JBOSS默认连接池配置

    jboss5.0mysql连接配置 <?xml version="1.0" encoding="UTF-8"?> <!-- The Hyper ...

  3. 虚拟机ubuntu16.0 安装 mysql 主机配置访问

    在bantu服务器中安装如下命令 sudo apt-get install mysql-server    sudo apt-get install mysql-client安装成功之后 进入配置文件 ...

  4. C语言二维数组作为函数参数

    设有整型二维数组a[3][4]如下:0   1   2   34   5   6   78   9  10  11 它的定义为:    int a[3][4]={{0,1,2,3},{4,5,6,7} ...

  5. UVA - 658 It's not a Bug, it's a Feature! (隐式图的最短路,位运算)

    隐式的图搜索,存不下边,所以只有枚举转移就行了,因为bug的存在状态可以用二进制表示,转移的时候判断合法可以用位运算优化, 二进制pre[i][0]表示可以出现的bug,那么u&pre[i][ ...

  6. Java加腾讯云实现短信验证码功能

    一.概要 现如今在日常工作和生活中短信验证码对于我们来说是非常熟悉的,比较常见的注册账号或者交易支付时候,手机会收到一个短信验证码,我们可以通过验证码来有效验证身份,避免一些信息被盗. 验证身份 目前 ...

  7. python3中bytes、hex和字符串相互转换

    1.字符串转bytes a = 'abcd' a1 = bytes(a,encoding('utf-8')) 2.bytes转字符串 a = b'abcd' a1 = bytes.decode(a , ...

  8. 【Qt】2.1 创建对话框

    QDialog是Qt对话框类,可以直接使用这个类来创建对象并显示出来. 要使用一个对话框,就这样子写: #include <QApplication> #include <QDial ...

  9. 一个小笔记(5):A*算法

    A-Star算法是一种静态路网中求解最短路径最有效的直接搜索方法其实百科有 http://baike.baidu.com/link?url=CvmkWQIAmztYgMq3Nk1WyWkDiC0koV ...

  10. [BZOJ4899]:记忆的轮廓(概率DP)

    题目传送门 题目描述: 通往贤者之塔的路上,有许多的危机. 我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增, 在[1,n]中,一共有n个节点.我 ...