haskell
Emacs helm-kythe与Haskell交叉引用
一直以来Haskell没有好用的工具支持goto-references,hasktags、fast-tags等能提供ctags风格的goto-definition,但不支持goto-references。最近Google开源的一个工具https://github.com/google/haskell-indexer(主要作者为Robin Palotai)提供了基于Kythe的交叉引用实现。
TUNA技术沙龙及A Pretty Printer Library in Haskell
技术沙龙准备
三天前王康提议开学前的周末搞个活动,之后敲定由Cheer Xiao、heroxbd、Aron Xu和我做演讲。得到消息很诧异,因为以上几位都有丰富的系统管理经验,我就不知道能干什么了……但毕竟被逼上梁山了,最后Cheer Xiao让我讲Haskell。
…8门编程语言的设计思考
今天参加了SHLUG的月度技术分享会,见到了三个同学的同学(呃~精确描述的话可能得写成这样:其中一个是同学A的同学,两个是同学B的同学)。
我就不同编程编程语言的设计思考为主题做了一个分享。之前在学校里做过类似的分享,这次把它搬到SHLUG上来了,对之前的幻灯片又修修补补,增添了一些内容(把之前Prolog、OCaml纸上谈兵的部分加了些代码,丰富了内容……当前,也可以把整张幻灯片看作纸上谈兵)。
之前“80分钟8语言”这个标题感觉有些误导人,毕竟读者的第一反应很可能是认为这是在介绍语法,第二反应是80分钟甚至无法把一门语言的语法给讲清楚,如何能把八门语言交代清楚。而且之前在学校分享时和另一位同学肖骐一共讲了两个半小时的样子,远远超出了80分钟。题目的用语想了一会儿,决定改为设计思考(design thinking)。
…80分钟8语言
今天要做一个关于不同编程语言的演讲,我介绍了Scheme, Smalltalk, Lua, Perl, Ruby, Prolog, Erlang, OCaml, Haskell,其中Perl是作为反例出现的。这些语言大多是这一年用零碎时间学的,像Lua、Prolog、Erlang、OCaml都只是看完了一两本入门的书,对它们的特点、优点短处、擅长领域有了个比较粗浅的认识;Scheme、Smalltalk则是一本书都没看完,理解就更为肤浅了;Haskell虽然看过两本入门教材,也翻看过不少文章,但它博大精深,广博之处只能窥见一二,精妙之处也无法领会太多,但还是列出了一些我所知道的。
…gcc中sqrt实现
对于sqrt(3);,Visual Studio会报告有歧义的重载函数调用,而gcc却能把这个解释为对sqrt(double)的调用。研究了一下gcc的实现,发现sqrt其实是《C++ Templates: The Complete Guide》中提到的type function,使用了名为SFINAE (substitution failure is not an error)的技术。这里是给出一个使用该技术的sqrt的简易实现:
Haskell学习笔记
机缘巧合,写了两个用到Parsec的Haskell程序。一个是Untyped lambda calculus,另一个是 po2db。adam8157对神器Pandoc大为赞赏,这也是Parsec的应用。Parsec 也有不少其他语言的复刻版,不过不少语言都缺乏Haskell自定义中缀操作符的功能,实现一个parser所写出来的代码可能会冗长很多。
八数码
八数码问题,已访问状态采用 factorial number system 表示,未访问的未使用(简化代码)
实现了 Breadth First Search 和 Heuristic Search 两种算法。
带上命令行选项 -g 能输出 Graphviz 的 dot 格式的状态树。
比较满意的地方是把两种搜索算法的共同部分抽象出来了,写成了单独的 search 函数。