Start to learn Haskell 03

郁闷

今天周六,公司附近基本上没有卖早餐的,不过今天看起来似乎比较幸运,竟然神奇的多了一家卖早鸡蛋灌饼的在地铁附近。为了早晨不挨饿就买了一个,但是不知道为什么,在去公司的路上我就一直感觉不太对,也一直在考虑只要再看到有一家卖早点的,我就把这个灌饼给丢掉。但是今天是周六嘛,我没有幸运的看到第二家卖早点的,只好将就一下了。
事情的发展是这样的,10点半吃完,到11点前就感觉不太对,我以为那是因为我还喝了格瓦斯,11点多出去抽烟,感觉更难受了,然后就去了厕所,先是拉肚子,然后出来又开始吐。中午吃饭时也感觉没有胃口,平时一碗面对我来说还略嫌不够,不过今天吃了连三分之一都不到就吃不下了,吃饭回来又接着吐。在拉肚子的时候任何一个屁都不值得相信,为了安全起见,又进了厕所,果然又是拉肚子,然后下午就由两个同事陪同去了医院急诊,拿了药回到家接着吐,然后睡觉,现在总算是好一些了。
这期间还有,从下午回来我就发现王爷是在家的,但是一直到我晚上起床都没听到他的动静,就打了电话给他,原来他老人家上吐下泄到今天凌晨4点,我勒个去的。
哦,还有,中日友好医院急诊内科的那个年轻女大夫很漂亮。

Haskell变量类型

基本类型

在Haskell中一切都是有类型的,如字符Char字符列表[Char]元组(Int, Bool),数值类型有IntInteger,其中Int受系统位数影响,比如64位系统,这种类型的范围就是-2-2…^63到2^63-1Integer类型则非常大,可以尝试一下product [1..50]

Start to learn Haskell 02

闲话

昨天去了一趟医院,然后就回家休息了,顺便帮着解决一些工作的事,以为小伙伴们应该也会像往前一样十点多十一点那样就撤了,直到今天早晨才知道,他们昨天竟然一直工作到凌晨一点多,太辛苦了,可怜的孩子们,今天我也要一起加班,不知道几点能撤,不过我手上的事倒是做完了,可以写写博客什么的,估计今天晚上会回得比较晚,不知道有没有时间看书。

元组(tuple)

昨天就学了关于元组的一节,元组跟列表有些相似,使用圆括号声明,如(1, "Toby", "M"),通过这个语句已经可以看出其与列表的一些区别,列表中只能保存一种数据类型,而元组可以保存多种不同类型,所以,元组应该更适用于保存一组有意义的档案,每一个元组都可以当做数据表中的一条记录来使用。

那么,如果我们保存的一组数据都是相同的数据类型,比如一组二维坐标点[[1,2], [2,3], 3,4]],这样看起来似乎不会有问题,列表中的每一个列表都是一个坐标,一切都是那么完美,可是一个意外出现了,某位连续加班一个星期的程序猿手一抖,这个就把这个列表写成了[[1,2],[2,3,3],[3,4]],程序正常的完成了编译,于是就把程序放上了线,结果,程序无法按照这些坐标画出期望的线。如果使用元组进行定义会是怎样哪?同个个程序猿又犯了同样的错误,写出来这样一个元组的列表[(1,2),(2,3,3),(3,4)],编译,出了错误提示,编译不通过,然后就直接按照错误提示找到出错的地方。

Start to learn Haskell 01

惯例闲话

昨天加班到比较晚,回家后基本上就11点多了,洗漱完毕基本上也就十二点了,不过还是坚持了一下,看了几页书,今天再接着写写。这次学的主要内容就是部分列表相关的操作,和区间以及列表推导式。由于每次都是睡觉前看上几页书并测试一下代码第二天才写BLOG,所以可能难免有些错误和遗漏,但是我仍然认为这样做是合理的,经过一段时间的理解和遗忘再加上回忆并记录下来,这可能更有利于掌握吧。

列表函数

  • null [1,2,3] 检查列表是否为空,返回TrueFalse
  • take 2 [1,2,3] 获取前n个元素组成的列表,当n为0时返回空列表,当n大于列表长度时返回整个列表
  • drop 2 [1,2,3] 删除前n个元素,并返回剩余元素组成的列表,当n等于0时返回整个列表,当n大于列表长度时返回空
  • maximum [1,4,7,3,6] 返回列表中最大的元素
  • minimum [1,4,7,3,6] 返回列表中最小的元素
  • sum [3,6,9] 对列表中的元素进行求和
  • product [3,6,9] 对列表中的元素求积
  • elem 3 [5,4,3,2,1] 检查给定数据是否为列表中的元素,返回TrueFalse

区间

简单区间

所谓区间,实际上是利用列表元素的规律以简单的方式生成较大列表的一种方法。例如,按之间所学习的,如果要定义一个从1到10所有整数的列表,就需要这样[1,2,3,4,5,6,7,8,9,10],但是如果使用区间则可以简化成[1..10],当然了,如果要生成字母A-Z的列表,同样可以使用类似的方法['A'..'Z']

Start to learn Haskell 00

闲话几句

很丢人,说好的开始写千字文的,但是因为工作原因,最近太忙,每天回到家里都已经很晚了,也就没有胆量开始写一篇文章,一是因为开始写之前需要思考,整理要写的内容,这些都需要花时间,而这会导致的后果就是睡得太晚,影响第二天的工作;二是因为一时间实在想不出要写什么,每天的工作生活千篇一律,工作就是写代码讨论解决方案,然后就是抽一点时间去吃饭,而且吃饭的花样都没什么太大的变化,然后其它的时间都是在上班或回家的路上。所以为了便于坚持,也为了增加点什么,打算现在今天开始学Haskell,然后把学习的过程整理出来,这也算是坚持写作了,然后再在偶尔有灵感的时候写点技术之外的感悟啊之类的,既然不能产出高质量的思想,那就整点也许对一些人有用的干货吧。

关于Haskell

话说Haskell是一种函数式语言,在此之前我接触过Common Lisp,而在我的印象中,属于函数式语言的也只有Lisp及其各种方言,如Clojure、Scheme。当然也曾听说过Haskell语言,不过当时对于这属于哪种类型的语言并不明确,在来到新公司之后,由一同事推荐之后才对这门语言产生了兴趣。

函数式语言对于我的意义,我想更多的应该是在于可以改变一下对于程序的思路,或许换个角度看问题,难题可能也就变成了随手可解的题目了吧。当然,如果能用这语言解决一些实际工作中的问题那就更好了。

关于阅读和买书

闲话几句

最近在简书上读了几篇关于写作和文章,其中有谈到关于如何提高写作能力的训练方法,其中有提到最重要的还是多写,于是在上面又看到了那篇译作《每天一篇千字文》。

这要说起来,写出千字的文章难度并不算大,但是每天写出一篇来这就很有挑战性了。我觉得,要是只是每天写出一篇千字文也许是可以凑出来,不就是千字吗,光写每天的流水帐也差不多可以整得差不多了,但是这样的文章写出来有意义吗?之所以写文章,要么就是表达思想、价值观,要么输出知识,如果只是每天千篇一律的生活流水帐,那还真不如不写。所以,每天一篇千字文的最大难度应该是每天能输出有价值的东西,这才是难度所在。

事物总是有两面的,回过头再想想,如果我真的能坚持这么写下去,总有一天,现有的知识会输出光,这时候为了坚持下去,会不会促使我去学习吸收新的知识哪?