haskell 乱搞笔记[原创]
|
脑洞时间:为什么世界上有那么多程序语言,那是腐朽的资本主义为了增加广大人民学习成本以及编译原理太过普及造成的,建议大学取消编译原理的一切课程,并挥起奥姆休的剃刀,把所有程序语言统统踢了,除机器语言外只留下两种语言:汇编和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 乱搞笔记[原创]的更多相关文章
- haskell 乱搞(2)之 Y-conbinator [原创]
Y-conbinator"有没有用"?并没有,在大多数支持函数式编程的语言里,你可以自由的使用递归,而这货只是作为理论基石弥散在函数式编程的血肉之中 这是数学笔记,这是数学笔记,这 ...
- “盛大游戏杯”第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 描述 在一个矩形的灰度图像上,每个 ...
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
- bitset 的妙用:乱搞字符串匹配
最近碰到了几次 bitset 乱搞字符串匹配的情况,故写文以记之. 1. 算法简介 核心思想:假设文本串为 \(s\),则对字符集中的每一个字符 \(c\) 开一个大小为 \(|s|\) 的 bits ...
- URAL 1827 Indigenous Wars(排序、乱搞)
题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...
- UVA 11853 [dfs乱搞]
/* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)
4692: Beautiful Spacing Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 46 Solved: 21[Submit][Statu ...
- 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞
3578: GTY的人类基因组计划2 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 367 Solved: 159[Submit][Status][ ...
随机推荐
- URAL 1519 Formula 1 (插头DP,常规)
题意:给一个n*m的矩阵,格子中是'*'则是障碍格子,不允许进入,其他格子都是必走的格子,所走格子形成一条哈密顿回路,问有多少种走法? 思路: 本来是很基础的题,顿时不知道进入了哪个坑.这篇插头DP的 ...
- codevs 1277 生活大爆炸 2012年CCC加拿大高中生信息学奥赛
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description Sheldon and Leonard are physicists wh ...
- 最完整的台达PLC培训教程(沈阳工大)学习笔记1
1) 可编程控制器的应用1 开关量逻辑控制:电动机启动与停止2 运动控制:对步进电动机或伺服电动机的单轴或多轴系统实现位置控制3 过程控制:对温度.压力.流量等连续变化的模拟量进行闭环控制4 数据处理 ...
- 迅为10.1寸人机界面工业HMI安卓电容屏定制生产供应商
10.1寸人机界面介绍: 配置铁电存储器:非易失性记忆体,掉电后数据不丢失. 连接云端,支持云服务:数据综合管理,更有效率. 静电防护技术:高强度抗干扰,防静电,防电磁干扰. 提供所有接口的调用源码, ...
- 关于HTML5中Video标签无法播放mp4的解决办法
1.首先先排除掉代码问题.路径问题.浏览器不支持问题等常规问题,这些问题另行百度. <video width="500px" height="300px" ...
- WPF知识点全攻略06- WPF逻辑树(Logical Tree)和可视树(Visual Tree)
介绍概念之前,先来分析一段代码: xaml代码如下: <Window x:Class="WpfApp1.MainWindow" xmlns="http://sche ...
- C05 C语言字符串和数组
目录 数组 字符串 数组 概念 数组是有序数据的集合. 数组中的每一个元素属于同一个数据类型. 通过数组名和下标唯一确定数组中的元素. 一维数组的定义 语法格式 数据类型 数组名[常量表达式] 例 ...
- C++系统学习之八:IO库
新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...
- URAL1561 Winnie the Pooh
题目描述: vjudge 题解: 高消(线性基)模$7$. 可以算是板子了. 具体见代码: #include<cstdio> #include<cstring> #includ ...
- svn设置提交时忽略某些文件
一.在资源管理器中,右键一个未加入版本控制文件或目录,并从弹出菜单选择TortoiseSVN →Add to Ignore List,会出现一个子菜单,允许你仅选择该文件或者所有具有相同后缀的文件. ...