体验一把haskell
这几天做到PAT一道比较数据大小的题PAT1065,题目不难,应该说是一道送分题,就是开数组,然后模拟人工计算的过程进行计算,再比较下就行。做完之后,联想到haskell的Integer类型是无限大的,那用到这个题里岂不是甚好!而PAT正好又支持用haskell进行答题,于是我就蛋疼地尝试用haskell来做这个题。
不过之前的haskell的知识快忘得差不多了,赶紧上网脑补。花了不少时间把程序写好了,就下面几句。
run x count
| x == = return ()
| otherwise = do
[a,b,c] <- (map read.words) `fmap` getLine
let s= a + b
sc=show count
putStr ("Case #"++sc++": ")
if s > c
then putStrLn "true"
else putStrLn "false"
run (x-) (count+) main = do
n <- read `fmap` getLine
run n
代码总共15行左右,用C来写的话应该在25行的样子,的确要稍微简洁了些。不过我还是感觉这段代码带有浓浓的命令式语言(imperative language)的编程风格,应该还可以再简化些。写的过程中碰到N多问题,主要是之前学习的时候,大部分时间都在学习haskell的语法和理念,都没有真正涉及几个像样有IO的程序。
感叹下haskell确实比较难用,对新人一点都不友好,难怪没几个公司敢用,招不到人啊!不像什么java,c,c++,或者php什么的,满大街的程序员,随手拈来都能够应付。但是haskell程序员可不是那么好当的,没两把刷子还真不敢对别人说自己会haskell。haskell里面新的概念如monad,lazy evaluation,purity,type class,type inference等,对其他语言阵营,尤其是非函数式编程范式语言中切换过来的人,无疑是一场颠覆认知的狂风骤雨,很难领会,不说进阶,即使是入门也需要费很大精力。
我在学习这些概念的时候,一开始是觉得很新奇,函数可以被当成变量,任意传递,甚至函数可以partial apply形成新的函数,原来程序还可以这麽写,不过学得稍深一点后,对haskell中的太多限制很不爽,有点质疑其背后的设计理念,没有循环,所有的循环都得通过递归来实现,没有变量的概念,虽然看起来好像是几个变量,但是他们跟C语言中的变量截然不同,可以把他们理解成不变量,因为一旦绑定为某一个值,那么他就是那个值,不会改变也不能够改变。
haskell引以为傲的purity,即没有side effect,在语言设计者的眼里,这就是一朵上上乘的皇冠,有了purity,程序出错的几率大大减小了,并行也不在话下,haskell的粉丝们都说
haskell严格的类型检查,的确让程序员能够在第一时间发现自己程序中的错误,减少犯错的机会。
要吐槽一下,如果你是haskell新手,你一定会发现haskell的编译提示非常不友好,即便是个经验丰富的老手也会常常被ghc莫名其妙的错误提示摇头晃脑头晕目眩。haskell代码的简洁也依赖于程序的结构性,尤其是代码缩进必须要规范,但是编译器又不能够识别缩进的问题,只会在你缩进不正确的时候,按照你当前的缩进进行parse,然后给出一堆你怎么也想不明白的错误提示。
haskell是一门很有趣的语言,很多概念与代数中的一些概念是同根同源的,小时候只能够死记硬背地把某一个名词记住,现在我才对这些光鲜的名词背后的意思有了了解,这是我又一次觉得那麽多年的数学还是不算白学。三月的PAT考试希望能够发挥得好一点,Curry大叔在天之灵可要保佑我,你看我在实验室都是偷偷抽出时间来学习您的语言,多麽不容易。;)
体验一把haskell的更多相关文章
- 在Service Fabric上部署Java应用,体验一把微服务的自动切换
虽然Service Fabric的Java支持版本还没有正式发布,但是Service Fabric本身的服务管理.部署.升级等功能是非常好用的,那么Java的开发者可以如何利用上Service Fab ...
- genymotion 模拟器 真是牛叉了 速度超快啊!!! 不解释了!建议大家速度去体验一把吧!
已经有人写了blog了 我就不再赘述了,详情去这里看去吧!! android genymotion模拟器怎么使用以及和google提供的模拟器性能对比 http://blog.csdn.net/ ...
- 体验一把做黑客的感觉-IPC$入侵之远程控制
前言 一看你就是看标题进来的,我可不是标题党啊,大家往下看吧,本文章主要介绍了利用IPC共享漏洞上传并执行木马. 基础知识 一.什么是IPC 进程间通信(IPC,Inter-Process Commu ...
- IBM Bluemix体验:Containers
国际版的Bluemix目前有三个region,US South,United Kingdom和Sydney.其中US South是功能最全的,UK其次,Sydney功能最少.Containers服务在 ...
- 微软Face API体验——人脸检测
微软推出了全新REST API,现在可免费获取密钥,大家可以赶快申请!申请地址:https://cn.projectoxford.ai/subscription 看了网站的API介绍,忍不住赶快体验一 ...
- OS X Yosemite Beta体验
自从看到Yosemite泄露图的那天起,就暗暗下决心,一定要坚守Mavericks阵营,坚决不升级,觉得新版系统界面简直其丑无比,结果过了没多久,就按耐不住了,在Windows下的虚拟机里面看了看,发 ...
- 体验Visual Studio 2015 Windows Forms应用程序开发与维护
昨天到半夜还没有等到Visual Studio 2015的下载地址,实在熬不住就先休息了.北美地区的时区比北京时间要晚一些,今天早上到公司就看到Visual Studio 2015的下载地址,迅速的将 ...
- PHP二次开发discuz3.2最新体验
康盛官方于6月4号发布了discuz3.2的正式版,因为这两天一直忙于一个项目,一直没来的及体验,现在抽时间总算是装上了,也体验一把. 根据官方说明:Discuz! X3.2 在继承和完善 Discu ...
- 【Android测试】【随笔】Bugtags初体验
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5410003.html 前言 早晨接到一个临时任务,就是尝试 ...
随机推荐
- Oracle Like子句
Oracle Like子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle LIKE运算符来测试列中的值是否与指定 ...
- python大佬养成计划----HTML DOM
什么是DOM? DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口.HTML DOM 定义了访问和操作 HTML 文档的标准方法.DOM ...
- C/C++中动态内存分配
代码段:用来存放程序执行代码的一块内存区域.这部分内存大小在程序运行前已经知道,通常属于只读,其中包括只读的字符串常量,不可改变 BBS段:用来存放存放程序中未初始化的全局变量及静态变量,属于静态内存 ...
- HTML To Word
一.源码特点 1.在一些实际的应用场景中,有用户需要将一批规范的资料网页保存为WORD文档以便离线传阅或用于其它需求.在此之前,使用了OFFICE组件来尝试完成此功能需求,但是效果都不尽如 ...
- principal components analysis 主成份分析
w http://deeplearning.stanford.edu/wiki/index.php/主成份分析 主成分分析(PCA)及其在R里的实现 - jicf的日志 - 网易博客 http:// ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_1_递归概念&分类&注意事项
a方法里面调用自己,但是没有停止的条件 方法没有停止的条件. 栈内存溢出的异常. 只有栈,没有堆内存 先执行main方法压栈执行 main方法里面调用a方法.a方法就会压栈 改成20000
- 《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week3 Networks and Sockets 12.1 Networked Te ...
- 《计算机程式设计》Week4 课堂笔记
本笔记记录自 Coursera课程 <计算机程式设计> 台湾大学 刘邦锋老师 Week4 Functions 4-1 System Function 函数主要分为两大类系统定义函数与使用者 ...
- 如何理解ajax的同步和异步?
对于如下一段代码: var dataJson = {"ABC":'testABC'}; $.ajax({ url: "/MonkeyServ ...
- AI会议网站
<麻省理工科技评论>新兴科技峰会EmTech China : http://www.emtechchina.cn/ IT大咖说 各种科技前沿会议发布站 : http://www.itdks ...