Tag Archives: lisp

重构Lisp项目代码

今天终于下狠心把之前的三个项目合并到一起了。 虽然他们各自作用不同,但却共享一个“单词表”。合并到一起后,逐渐形成了一个特定与我们产品项目相关的“单词表”和语法扩展,离DSL不远了。  

Posted in LISP | Tagged | Leave a comment

翻译《Common Lisp – Myths and Legends》

原文地址: http://www.lispworks.com/products/myths_and_legends.html Common Lisp – 迷思与传奇 从1958年起,Lisp就在支撑着世界上最复杂的应用。并且从那时起,Lisp已经成长了很多。如果你或其他你认识的人从课堂上学到或者从朋友那听说过一些关于Lisp的偏见,因而对Lisp怀有恐惧或者疑虑。那么,现在是时候更新下了。本文我们将对当今的Lisp审视一番。   部分来说,Lisp充满了传奇。我们(本文指Lispworks公司)经常听到我们的用户们说,他们用Lisp来开发系统,节省了5到10倍的开发人工,节省了大量的投资。他们说“如果不是用Lisp我们将无法完成这个项目。”一旦用上Lisp,就再也不想换了。在本文中,我们会看到他们如此热衷的原因,及为什么Lisp是高级应用开发中最适合的语言。   围绕在Lisp四周有很多的迷思(myth)需要驱散澄清,我们决定在本文中直面它们的一部分。如果你有任何问题,请来问Lispworks。我们不惧怕困难的问题,处理困难问题就是我们的特长。这也是Lisp为什么在40多年中保持强壮成长的原因!本文由AlbertLee翻译。 (译注:这段有点广告,尊重原著还是翻了出来。Lisp现在已经50年了。)   谁在用Lisp? 尽管你不是总能看到,但Lisp就在你身边。   随着Web的成长,也一起增长。 Yahoo!Store 包括了一个通过标准浏览器编辑在线商店的 WYSIWYG 编辑器。这个编辑器用 Common Lisp开发。通用的基于 Lisp的web服务器包括: CL-HTTP,由 MIT AI实验室的John Mallery架构设计。 (译注:Paul Graham 的 Viaweb 真是目前最成功的Lisp商用实例阿,只要是Lisp的推广文必说阿。)   一些公司认为Lisp技术非常有价值,因此倾向于秘密的使用;这经常使得想要吹嘘Lisp的成功的人感到挫折。但是在1994年,AT&T做出了一个不寻常的举动,他们允许 Harlequin 确认了“他们在为AT&T提供Lisp咨询与产品,帮助AT&T开发交换机。”在此后,Harlequin创建了他自己的LispWorks变种系统,它提供了实时响应的能力以满足AT&T的严格需求,而且还是有垃圾收集的实时系统! (译注:这种不开放部分上玩死了Lisp……)   你用信用卡么?在你进行信用卡用户认证的时候很可能后台就有Lisp技术使用。欺诈检测是另一个Lisp很成功应用的领域。 … Continue reading

Posted in LISP | Tagged | Leave a comment

Common Lisp中使用字符串动态调用函数

应用场景:一个统计查询的后端程序,根据查询名称字符串分别调用相应的处理函数。 一般的处理方法,可以用一个全局的注册表,将名称字符串与函数名对应起来。但是,lisp程序员是很懒惰的,既然lisp环境本身已经提供了名称注册的机制,为什么还要自己写一套呢?事实上,Lisp环境本身的核心就在于 namespace 。 简单的说解决办法如下:   执行如下:   也可以用 find-symbol 函数:  

Posted in LISP | Tagged | 3 Comments

在Common Lisp中远程调试服务器上正在运行的程序

Common Lisp开发中一个狠锋利的特性就是他的动态性,以及全程的可用性。体现的狠明显的一点是:一个lisp程序在运行中,也可以狠方便的连接上进行调试和升级,而不需要暂停服务。 也就是具有“热升级”的能力。 要实现这个功能,就要靠SLIME + Emacs 这对黄金搭档了。 废话不多说,直接看看它在实际使用中是什么样子的: 1. 服务器(当然是 Unix 系的),上面运行Common Lisp的程序,在程序中启动一个 swank 服务器。swank就是slime的服务端。比如一个项目的启动脚本如下: 2. 你本地的客户端, Emacs + slime 插件 3. ssh管道。 由于swank的服务器绑定的是localhost,因此不能直接远程连接,通过创建一个ssh管道将服务器上的端口绑定到本机:   一个典型的远程调试的使用方法: 在Emacs中,打开slime,执行: 下面就可以打开一个Lisp 文件,进行调试了。这个时候,我们可以根据需要,打开一个本地的文件作为 patch ,也可以在emacs中通过 TRAMP远程编辑服务器上的源代码。在我们编辑或者增加一个函数后,通过 Ctrl-c-c 就可以Eval 一段新的函数定义。然后,我们的服务程序就被hot-update 了。 通过 slime-inspect 远程连接到这个swank服务器,查看各种变量的情况。 M-x … Continue reading

Posted in LISP | Tagged , , , | 5 Comments

《Land of Lisp》 读书笔记汇总

本系列读书笔记原发在豆瓣上,现在转贴到自己的窝里,增加点货。 第2页 什么让Lisp如此不同? Lisp是为那种极为复杂的程序准备的。 当你学一门外语时,不管学的多好,做梦时还是会用母语。而学了Lisp后,做梦都会用Lisp。意即Lisp不只是一门语言,更是一种思维方式。 第4页 既然Lisp那么强,为啥没人用Lisp? 其实很多hacker、机构和商业公司在用,而且Lisp的很多特性被很多其他语言借用。Semantic Web语义网的很多工具也是用Lisp开发的,如 RacerPro, AllegroGraph 那为什么Lisp会给人一种已经死去的感觉呢?人们判断一个事物的价值一般通过三种没有科学根据的条件: 1. 看别人学什么 (C++, Java) 2. 哪些容易学 (忽悠、Ruby 等 , 呵呵,原文如此) 3. 显而易见有价值的 而Lisp哪种条件都不合,因此大部分人的结论就是不要学Lisp。 而一个lisp用户,是不会废口舌跟别人说Lisp有多强大的,浪费时间,或许挫折太多。乐得让Lisp呆在角落里面,自己暗爽。 此书末尾有一个漫画,可以一窥Lisp的威力。 第一章: Lisp 起步 Lisp有很多种方言,主要的有两种: Common Lisp 和 Scheme ,每种方言又有很多种不同得实现。在选择Lisp的实现方言时,作者给出了三张图: A 狼 B羊 C披着狼皮的羊 … Continue reading

Posted in LISP | Tagged | 2 Comments

开始编写《LISP利器》系列

工欲善其事,必先利其器。LISP利器系列 开搞。

Posted in LISP | Tagged | Leave a comment

每天一点小惊喜,LISP更安逸

决定从CSDN的blog 搬迁到自己的站点的一个重要原因就是:CSDN 的blog不支持 LISP代码高亮!这个无可厚非,毕竟用LISP的是少数派。 今天的几个惊喜: wordpress 真是NB透了,安装插件真方便,全部在web界面上一键搞定 quicklisp  真是NB透了,安装LISP模块真方便,升级它的软件库也很容易 atdoc 模块真是NB透了,在LISP代码中插入doc string,自动生成整个项目的程序文档,漂亮极了。能生成HTML和LaTeX、info的页面。看到生成的文档都不想看源代码了。

Posted in LISP | Tagged | 11 Comments