Elisp Basics

闲话

有很长时间没写Blog了,主要原因是,不够自律,没有坚持写下去,次要原因是,最近确实是忙了些,几乎每周都有一多半的时间是在下班的,由于这样的疲累,也导致了一旦不上班的时候就忙着休息了。

有时想想,其实忙并不是放松的理由,最主要的原因还是因为懒,这个是一定要改的,再不改我们就老了。

最近做了几件事,首先当然还是工作,游戏有前端进步非常大,与半年前相比几乎完全变成了另外一个游戏的感觉,加入了新角色,玩法系统也更丰富了,对于我负责的后端,除了加新功能,其它的变化并不大,但是有计划对架构底层的Cache系统进行改进,这将很大的提高系统的性能和稳定性;另外的事就是,关掉了LinodeVultr主机,当然了,这跟这两家的服务质量无关,主要是我为合理调配资源。首先,开了一台AWS用来做佛跳墙的主力服务器,另外开了一台香港的主机用来放BLOG和小项目,而且同时在搬瓦工DigitalOcean还各有一台VPS做备用的科学上网服,所以,这个时候还留着LinodeVultr就是极大的浪费了吧。不过话说回来,这两家的东京服务器对于国内来说还是相当不错的,也就只比香港机房差一点吧。

Emacs & Elisp

从使用Emacs开始到现在也有个几年了吧,不过大多数时间都是在别人配置的基础上进行修改,而且在Emacs上时多半都是一些中小型的开发和写作,这样的应用场景下,自然对于Emacs的配置要求就没有那么高了。趁着这段时间没什么学习新知识的想法,刚好可以再次拿起Emacs以及必须要掌握的Elisp好好学习一番了。

因为之前对Common Lisp有过一定程度上的了解,所以对于Elisp其实接受起来还是挺快的,在简单看了几篇关于Elisp的文章后,对于Elisp的大概印象也就有一些,在这里仅对Elisp做一个简单的介绍,备忘吧。

Read More

Start to learn Haskell 03

郁闷

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

Haskell变量类型

基本类型

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

Read More

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)],编译,出了错误提示,编译不通过,然后就直接按照错误提示找到出错的地方。

Read More

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']

Read More

Start to learn Haskell 00

闲话几句

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

关于Haskell

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

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

Read More