最近我们组打算重构tightvnc源码,而我准备先当马前卒,把多线程换成单线程,对抓屏、分析、发送改成单线程,去掉不怎么需要的模块,预计工作会比较繁琐。

当然,以上是题外话。来公司一年后差不多零散的新学了五门语言,而比较特别的便是haskell了。之前快毕业的时候在学校看了一点函数式编程的资料,也看了haskel,但很快由于松散搁置了,因为像大多数程序猿一样觉得用处不大。最近又开始学是因为听了组内一个牛人波仔的讲座,而他的例子就是haskell,加上姚老师鼓励我们学习函数式编程,便又打算重新理一遍。本文打算从语言的角度来学习,由于目前只看了一半,先做个上集吧,有些概念不一定对,欢迎大家指正。

1、haskell中的变量跟其他命令式语言的变量不一样,比如你可以在其他语言执行一下赋值语句:

         a = 5a = 6 (python, js)

         int a = 5; a = 6(c++/c,OC)

         var a int = 5 a =6 (go)

但haskell不行,如果你执行:

a = 5
a = 6

将会得到错误:

Multiple declarations of `a'

haskell中的变量定义之后就不能被赋值,懒计算是不是呢?

2、haskell能解释执行也能编译执行,不过我一般用编译器GHCI,在preclude中输入!ghc --make filename.hs便可以得到可执行文件了,前提是filename.hs文件书写了main函数.

3、注释与其他语言异类:用的是--和{-语句-}两种;

4、多态与pattern matching:可以参考一下c++的多态和模板,可以写出非常优雅的代码,如最著名的快排:

qsort :: (Ord a) => [a] -> [a]
qsort [] = [] --edge condiction
qsort (x:xs) = qsort qsort_left ++ [x] ++ qsort qsort_rightwhereqsort_left  = [left | left <- xs, left < x]qsort_right = [right | right <- xs, right >= x]

当然也可以用let和in来写,是不是很直观优雅,让人心醉啊。

解释:其中Ord是typeclass,按haskell的文档所说,有点类型java里的接口。类型a相当于是Ord的一个实例,重载了Ord里面的所有算子,Ord a相当于是对类型a的一种约    束。上述那段话可以解释为:对于每一个类型a,类型a必须是class的一个实例(即类型a可以使用算子">="等等),函数qsort的参数声明为输入一个列表,返回一个列表。如果去掉(Ord a),会得到如下错误:

    No instance for (Ord a)arising from a use of `>='
    In the expression: right >= xIn a stmt of a list comprehension: right >= xIn the expression: [right | right <- xs, right >= x]

'>='便是typeclasses的operator,有点抽象,可以慢慢体会。

5、跟python一样,用缩进来表示区域范围,所以就不要蛋疼的混用tab和space了。不过养成好的编码习惯就好,小小提个问题,还记得js中的蛋疼的{}吗?有陷阱的。

6、优先级:haskell中函数是一等公民,所以优先级最高,高于所有运算符。

7、定义新类型可以使用Data关键字,记住要大写(Go里面也有一个关于大小写区域可见的问题,有兴趣可以去了解下),为已有类型定义别名使用type关键字。

上面主要讲的是haskell的类型和一些基本语法,下次我看看能讲写关于高阶函数的东西否。祝周末愉快!

对我有兴趣的同学可以关注我的微博:@Graphic鹰仔.

转载于:https://www.cnblogs.com/bite_the_bullet/archive/2013/05/25/3099088.html

简单谈谈haskell相关推荐

  1. mysql慢查询检查流程_简单谈谈MySQL优化利器-慢查询

    慢查询 首先,无论进行何种优化,开启慢查询都算是前置条件.慢查询机制,将记录过慢的查询语句(事件),从而为DB维护人员提供优化目标. 检查慢查询是否开启 通过show variables like ' ...

  2. html js脚本限制 正则,简单谈谈JS中的正则表达式

    1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...

  3. 微信小程序setinterval_简单谈谈setTimeout与setInterval

    感谢踩过的坑 sf社区的第一篇文章. 最近在做一个拍卖的微信小程序,用到了定时器setTimout和setInterval,简单谈谈这两个api. setTimeout 最常见的用法就是第二种(第三种 ...

  4. 简单谈谈setTimeout与setInterval

    感谢踩过的坑 sf社区的第一篇文章. 最近在做一个拍卖的微信小程序,用到了定时器setTimout和setInterval,简单谈谈这两个api. setTimeout 最常见的用法就是第二种(第三种 ...

  5. VR看房火热背后,简单谈谈拍摄VR全景图片——普及贴

    VR看房是云看房的标配,今年恒大的恒房通,一个月成交的房子合同超过了500亿元! 九商VR全景支持视频.音频.三维产品等全景互动功能,还可在微信.微博.网站.小程序等平实现高质量的全景展示和分享,并已 ...

  6. 简单谈谈编程语言(外篇)

    本文是前三篇文章的外篇,主要讲讲我从C到C的编程语言之路,从上层应用到较底层开发,目前主攻C语言嵌入式开发.本文本来预想是两个星期前写的,但由于热身赛临近,需要投入大量的时间,所以迟迟抽不出时间来,加 ...

  7. VR看房背后,简单谈谈如何拍摄VR全景图片

    VR三维全景看房是云看房的标配,那么重点来了. 今天给大家简单谈谈拍摄VR全景图片 1.设备选择 目前市场上的VR全景拍摄设备越来越多,菊花发布的手机号称能给月球做全景拍摄的功能.除了外,还有普通卡片 ...

  8. 荣耀v8升级android 8,荣耀逆向升级?简单谈谈荣耀V8升级荣耀8X感受

    荣耀逆向升级?简单谈谈荣耀V8升级荣耀8X感受 2019-03-09 17:11:43 1点赞 0收藏 1评论 话说在2016年底,家里老妈的红米note因卡机不断,最后经不起叨叨就给她换了手机.她的 ...

  9. 简单谈谈OAuth 2.0的四种认证方式

    简单谈谈OAuth 2.0的四种认证方式 一.基本认识 1.1 OAuth认证中的四种角色 二.认证方式 2.1 授权码认证 2.2 简化认证 2.3 密码认证 2.4 客户端认证 一.基本认识 在小 ...

最新文章

  1. 【数字信号处理】相关函数应用 ( TDOA 时差估计 | 时间差与距离差 | 方向定位与精准定位 | 信号描述 | 通过相关函数求时间差 )
  2. 【代码规范】常见命名规范
  3. windows和linux的共享
  4. 190311每日一句
  5. 计算机蓝屏代码0x0000007A,电脑开机蓝屏代码0x0000007a怎么办
  6. 2016年四川省TI杯电子设计竞赛B题
  7. mysql中selectform_数据库中select...from....where....各表示什么意思
  8. CPU卡PSAM卡 响应指令
  9. c语言 解元二次函数的源代码,学霸强推,高中数学万能解题方法,对数学一筹莫展的你必看!...
  10. STM32L4系列单片机ADC通过内部参考电压精确计算输入电压
  11. 爬虫实战-链家北京房租数据
  12. csv文件示例_自己动手? -一个简单的CSV解析器示例
  13. idea配置springboot
  14. STM32中堆栈的理解
  15. props的基本使用和特点
  16. 中国智慧生活博览会(CEE 2017)—数字世界亚洲博览会会刊(参展商名录)
  17. shp文件转3dtitle
  18. dcp-9020cdn硒鼓停止_dcp9020cdn硒鼓!错误_显示硒鼓错误的解决办法
  19. 2023.1.13单词打卡
  20. 推荐系统常用评测指标

热门文章

  1. 视频超分中的自监督适应方案
  2. 18K-28K/m, 南京的卢技术社招:感知、OCR、SLAM方向
  3. 除了 Tensorflow、PyTorch ,还有哪些深度学习框架值得期待?
  4. CVPR 2020 | 3D目标检测泛化问题研究
  5. CVPR 2019 | 旷视提出超分辨率新方法Meta-SR:单一模型实现任意缩放因子
  6. 开源、高质量QR码多语言生成库
  7. Python学习:快速搭建python环境
  8. 深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套!
  9. android 应用切换动画,怎么在Android应用中利用Activity对动画进行切换
  10. 第一章 | 使用python机器学习