Articles with lisp

状况系统 与 异常处理

状况系统 与 异常处理

“Lisp 的状况系统(condition system)是它最伟大的特性之一。” 有没有最伟大我还不是很清楚,但可以肯定的是给了我耳目一新的感觉。 会 Java 的应该都对了解其异常处理的机制,这一类型的异常处理方式估计是使用最广泛(Python, JavaScript, etc)的了。 其表达形式也比较简单:(以 Java 为例) try { // do something could cause exception } catch (Exception e) { // handle exception } 而且,产生的异常如果不好处理还可以往上抛(throw exception),当异常向上层抛出的时候,异常信息以异常对象的形式向上传递,调用栈会展开(unwind),如果某一层没 catch 住或者处理不了继续往上抛。相当不错的模型,简洁易用。 似乎一切异常都逃不出手掌心了。到现实中的代码翻翻看。先排除掉哪些 catch…

Continue reading

CLisp 中含非零小数位的数值比较问题

在试验 CLisp 的数值比较的时候,发现一个奇怪的东西 CL-USER > (= 0.2 1/5) NIL CL-USER > (> 0.2 1/5) T CL-USER > (< 0.2 1/5) NIL 但是,当不涉及到小数的时候是一切正常的 CL-USER > (= 1.0 1) T CL-USER > (= 1.0 10/10) T 而且,带小数总是大于用分数形式表达的。从形式上很难看出来是什么问题。…

Continue reading

开始学习 Lisp

好吧,我是受到 《黑客与画家》 的催眠,去看 LISP 的,不过越看越清醒。 真的是好东西。之前看 Scala 的时候惊叹于它的 表达式 与 函数 之间的模糊边界,而且函数式编程使我从执着于模仿 Java 的编程方式中释放出来,对应该怎么样写代码有了更多新认识。虽然我了解的支持 FP 的首个语言不是 scala,是 JavaScript,只是很少人会把 FP 当成是一种特色,一种解决问题的方式。 学会了语法,了解了库,学会了设计模式,是能够让我开始编写代码解决问题了,但是不需要很长时间,就会发现“砖头”(构成代码的单元)不够用了。也就是自造砖头会成为一种常态,而怎么自制出跟你已经用惯了的那些基础砖头一样好用的砖头就成为一个问题——如何更好地表达问题,更好地抽象。而这个问题解决不好,它会以各种各样形式表现出来,我觉得是使我经常郁闷的重要来源。而且代码不仅仅是给自己用的,通常是一个开发小组里使用,它就成了像流行性感冒一样的不治之症,不时发作。在被各种头疼弄死之前,我觉得我还可以再抢救一下。 不是说 Lisp 本身多么的强大,也不是想要比较各种语言的强弱,程序猿要的不就是能够用好来表达自己解决问题的方式的语言么。其实我也说不准什么时候才会实战 Lisp ,更何况现在正受到 Nodejs 的感染…… 但这个开始,给了我信心,带来了更多可能性。 传送门: Lisp 之根源 (中文的,还有惊喜) ANSI Common…

Continue reading