今天要做一个关于不同编程语言的演讲,我介绍了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的简易实现:
给xbindkeys添加key sequence支持
xbindkeys不支持emacs风格的key sequence,不过由于它可以调用guile来支持scheme的配置文件。xbindkeys的tarball里有一个配置文件,支持key sequence的特殊形式:两个键的序列。
最近正好学了些scheme,就好好折腾了一把,写了一份配置文件,可以支持任意长的key sequence(当然太长的一般用不到)。
Haskell学习笔记
机缘巧合,写了两个用到Parsec的Haskell程序。一个是Untyped
lambda calculus,另一个是 po2db。adam8157对神器Pandoc大为赞赏,这也是Parsec的应用。Parsec
也有不少其他语言的复刻版,不过不少语言都缺乏Haskell自定义中缀操作符的功能,实现一个parser所写出来的代码可能会冗长很多。
网络学堂feeds2mail
用网页来看网络学堂的公告很费时间,就打算像 rss2email
那样,把消息制作成邮件。 用 Ruby 的 mechanize
来和网站交互,读取“课程公告”和“课程文件”中的消息, 把链接
sha1 后判断是否生成过提示邮件,没有则跟踪链接,用
w3m 输出成纯文本, 生成的邮件用 sendmail
投递。