脑洞时间:为什么世界上有那么多程序语言,那是腐朽的资本主义为了增加广大人民学习成本以及编译原理太过普及造成的,建议大学取消编译原理的一切课程,并挥起奥姆休的剃刀,把所有程序语言统统踢了,除机器语言外只留下两种语言:汇编和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. Ubuntu下Postgres安装与配置

    postgres8.4安装配置:1.安装postgres8.4~$ sudo apt-get install postgresql 2.修改超级管理员postgres密码:以系统用户运行psql~$ ...

  2. 在Mac里给Terminal终端自定义颜色

    Mac里终端显示默认是一种颜色,太单调了. 然而我们可以自定义这些颜色显示.进入-目录,编辑文件.bash_profile, 输入如下内容: 第三行那些fxfxax看起来是不是像天书?实际上是有规律的 ...

  3. python学习(day1)

    一.在这次实训之前,虽然听说过很多次python这种语言,但是从来没有真正去学习过,仅仅知道它是一种目前十分流行且功能非常强大的语言,可以方便快捷的实现很多功能.今天的课程带我了解了python,并且 ...

  4. C# Process.Start方法

    System.Diagnostics.Process.Start(); 主要功能: 1.打开某个链接网址(弹窗). 2.定位打开某个文件目录. 3.打开系统特殊文件夹,如“控制面板”等. Proces ...

  5. Jascript原型链以及Object和Function之间的关系

    先看一个简单的function变量 function fun1(name) { this.name = name; } console.log("fun1", fun1) 从结果可 ...

  6. shell脚本,检查给出的字符串是否为回文

    [root@localhost wyb]# .sh #!/bin/bash #检查给出的字符串是否为回文 read -p "Please input a String:" numb ...

  7. 简单的Redis数据迁移

    dump迁移 1.安装redis-dump工具 sudo apt-get install ruby rubygems ruby-devel -y gem sources --add http://ge ...

  8. 开启和连接mysql服务器(win10为例)

    1.windows图标右键,选择“计算机管理”: 2.展开左边的“ 服务和应用程序” 选项,点击“服务",找到 MySQL 服务器,点击左侧的 "启动",即可完成 MyS ...

  9. Python3 安装pip 提示ModuleNotFoundError: No module named 'distutils.util'

    环境ubutun14,python版本是python3.6. 今天在安装Pip 时出现ModuleNotFoundError: No module named 'distutils.util'.操作步 ...

  10. Django 千锋培训的学习笔记(2)

    Django 千锋培训读书笔记 https://www.bilibili.com/video/av17879644/?p=1 切换到创建项目的目录 cd C:\Users\admin\Desktop\ ...