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的文档,里面自然数就是如我刚刚写的那般定义的了。
浙公网安备 33010602011771号