Chinaunix首页 | 论坛 | 博客
  • 博客访问: 959989
  • 博文数量: 134
  • 博客积分: 7443
  • 博客等级: 少将
  • 技术积分: 1411
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 20:18
文章分类

全部博文(134)

文章存档

2012年(7)

2011年(29)

2010年(16)

2009年(6)

2008年(18)

2007年(58)

分类: C/C++

2007-10-16 23:05:07

Lisp语言的统一的哲学

接触Emacs Lisp语言后。切身体会到Lisp语言设计上的一个哲学,统一的哲学。这里的“统一”是指使用尽量少的概念概括尽量多的东西。表现在:

  1. 到处是List(列表)。在Lisp的源代码中,到处是括号,这是因为括号是List的边界。List是使用空格分割的,使用小括号括起来的任何元素。List的元素可以是东西的名字(函数或变量名),原子项,或者是其他List。程序本身和程序处理的数据是统一的,都是List.

  2. List语句被执行等同于计算List的值,可以被计算值的List要么是函数调用,要么是前面带单引号的Quote List。因为原子项可以被计算值,原子项也是语句,也是List

  3. 大多情况下,Lisp语句是函数调用。一般意义上“函数调用”基本上等同于“语句”.于是在Lisp语言中好像一切都是函数调用:

        1. 计算表达式是对函数的调用。(+ 2 3)

        2. 条件循环语句,while函数的调用。

        3. 条件分支语句,是对if函数的调用。

        4. 甚至定义一个新函数,是函数defun的调用。

软件设计中的统一哲学

在软件设计中,我们也有这种统一的倾向。我们创造性地发明一些通用的构造元素或概念。我们总是希望尽量多的使用它。有时候甚至象得了强迫症,一旦发明了锤子,就把尽量多的东西看成钉子。这不只是因为我们希望提高软件的可重用性,这其中还有一种对完美性的追求。我们相信:完美的东西就应该是广泛适用的。不断地善我们的构造元素或概念,使用它去解决更多的问题,无疑是对完美的追求。

  1. 关系数据库被发明后。我们能把任何数据形式,都以二维表的形式存储。比如,把层次的树状结构保存到二维表中。

  2. 面向对象方法流行起来后,我们发现什么东西都能抽象成对象。

  3. UNIX系统中,既然有了文件的概念。那么,各种设备什么的东西也可以统一地看作成文件。

  4. 掌握了些设计模式,我们就有了把见到的设计往模式上靠的思维倾向.

  5. ...


这种统一的思维倾向肯定是值得肯定的。但软件设计是一个复杂的思维活动,各种思维倾向同时存在于大脑中。过分的强调一种倾向也会限制你的思路。


就像古老的Lisp语言使用起来并不方便。有时,过分地把不太一致的东西统一,也许是不正确的。为了把过多的东西统一,你可能会创造一个过分复杂的概念。使用尽量少的通用概念去概括,概念的数量虽然减少了,但概念变得复杂了.


阅读(2926) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

cuichaox2011-12-31 10:29:15

GFree_Wind: 很好的总结,前辈啊。。我觉得这才是学习语言的方法,就是要去看透语言的本质。.....
过奖。 知己啊,多探讨交流。

GFree_Wind2011-12-31 10:23:34

很好的总结,前辈啊。。我觉得这才是学习语言的方法,就是要去看透语言的本质。