JAVA vs LISP 冰与火之歌

教学语言大多都是C/C++这种重视效率的语言。而且语言本身没有像JAVA,LISP这种哲学内涵。
现阶段很多教学语言已经改成了Python,因为它简单,方便,实用,功能强大。而且python强制缩进还可以顺便养成良好的语言习惯。

进入大学后主要学的两种语言还是LISP和JAVA,因为他们低调奢华有内涵。
JAVA和LISP分别代表了面向对象和函数式编程的极端。
JAVA:"everything is object"
LISP:"everything is function"
他们也是这么做的。当他们高喊着改变一切之口号出现时,首先考虑的是越搭越远——因为这也是最有意义的部分。LISP中无力思考的高阶函数(这也是为什么说SICP很难?)和JAVA内纷繁复杂的组合和继承。这两种能力已经使程序走向了软性计算和工程设计的巅峰。LISP在人工智能的优良表现和JAVA在软件开发的莫大贡献也是因为这个。
经过若干年,他们最终发现造起一座大厦的构件已基本完成。如果不考虑效率,人们已经可以得心应手地建起任意深的高阶函数和任意复杂的类。在构件完成后,本着everything的口号,便开始重新审视各自的地基。
这也是真正丧心病狂的开始。
在各自语言的最初构件中(地基处)都一些不良因素——基本类型。JAVA率先封装了他们,不难想象,在若干年后,JAVA的发明者们一定会想方设法地彻底类化。这一步完成后,估计所有语句都难逃厄运。统统变成类,想着以后全部都是"."的生活就觉得有点有趣。If.if()。。。哈哈哈哈。。。。但估计还是会提供方便的“方法”的吧。。。
LISP的走向估计是把所有基本类型都函数化。至少在思想上是这样。(lambda () 1)是吧。。。两个数相加就是函数相加。哈哈哈哈。。。。真有趣。。。。彻底从字符空间变成函数空间上的操作了。

关于语言我已不能说的更多。本身不是做这个的。但语言真的很有趣。感受一下,写写玩玩都是好的。

 

JAVA的构建比较像集合论的构建方式。

  class A extends B{

    C c;          -----> $A = B \cup C$

  class A{

    B b;C c;       ------> $A = <b, c>$(想了一下更像一个有序集)

  }

这样实际上可以从object(空集)开始无中生有,搭建起整座意义的大厦。

int, char这种东西是可以实现的。参照冯诺依曼自然数构造的方案。显然可以如下定义自然数:

0: Object

1: class One{Object}

2: class Two{Object,  One}

3: class Three{Object, One, Two}

……

但不难看出这样会很复杂。所以提供一下“助记(记录)符号”是很有必要的。这也是int和char的诞生。

 

Lisp更加玄乎,其选用的数学模型lambda calculus我也一知半解。但Lisp和其自身数学模型结构很像,可以感受一下“万物皆函数”。

关于Lisp中的基本类型 int之类,也完全是可以在其语言自身解决的。但太过冗长。以及考虑实际冯诺依曼架构计算机的效率问题。

 

如果有一天出现了一台适合函数式架构的计算机,那么纯粹的语言也是可以存在的。

到时候大概翻文档一看,自然数的定义就是church number了。

同理出现一台函数计算机,那么估计翻开JAVA的文档,里面自然数就是如我刚刚写的那般定义的了。

posted on 2014-04-12 01:12  寒月无锋  阅读(994)  评论(0)    收藏  举报

导航