赛义甫的个人博客分享 http://blog.sciencenet.cn/u/saif 逻辑学、数学、计算科学、语言学和哲学——关于形式科学的思考

博文

读《Lisp的本质》(The nature of Lisp)——悼Schönfinkel

已有 929 次阅读 2017-3-15 09:03 |个人分类:计算|系统分类:科研笔记|关键词:Lisp Schönfinkel

生性不喜造神、不喜造神运动,也不喜欢造神的人。IT社区那些喧嚣无脑的编程语言排行论(不是排行榜)是我避之唯恐不及的。把某个或某些编程语言吹上天,再把另外一个或某些语言踩到地,宗教般的狂热很容易让人想起中外历史中一些疯狂的年代。


现在问题来了,如果有人造了一个神,不过在神的背后不是令人炫目的光环而是冷彻的理性——令人拍案叫绝的哲学思想、一种洞见,一种把你天天见到熟视无睹的各种目及之物用一种“匪夷所思”的方式贯通起来然后让你自然得到结论——这些所谓的“各种”事物其实就是一种,你的世界从复杂、纷纭、喧嚣、无序突然变得整洁干净了,你会拒绝这个“神”吗?是的,这个时候,我当然要脱帽致敬,但是致敬的目标不是偶像而是思想——令人感到通透的见识和洞见。


Lisp的本质》是一篇雄文。本文的作者,一位美国的俄罗斯移民,一位常年从事IT的程序员,写了这么一篇“洗脑文”,一篇类似传播宗教福音的宣教文。作者叙述了自己被Lisp洗脑的过程,从开始对Lisp的不解、甚至有些鄙视,到如何听到Lisp“先知”的教瑜,出于对大神的崇敬和膜拜,强迫自己开始洗脑的征程——

突然有一天,作者“顿悟了”,羽化成仙了,在升天前的最后一刻,向尚未开化的芸芸众生们留下了这篇雄文。


作者的“悟”来自于对先前的编程经验与Lisp之间的神秘联系。第一个出场的就是XML语言。XML是21世纪初各大商业IT公司、大学和研究机构看好的一种描述数据格式的”普遍语言“,随着Web Services的兴起,开始取代相类似的各种专用协议,成为网络传输数据和方法的标准格式。不久,XML更成为各种编程语言的附属物——各种环境参数配置文件的通用语言,甚至成为编程语言。随着XML使用范围的扩大,逐渐发展出一套完整的XML技术,对XML文档的格式的专用语言、对XML文档数据的查询语言等等。XML的最大优点就是,如作者所说,可以定制文档操作符的语义。当然,XML技术为此付出的代价就是语言的笨重,句法多于语义。但是从另一个角度,XML文档,既可以当做标准的数据文件也可以对某些操作定义其接口或者叫”签名”(signature),这样,XML实际上兼有数据和处理两方面的特征。


而这,正是Lisp语言最本质的特征——自定义语言的语义。我不想掩饰当我看到这一段时的拍案叫绝心情,绝了,真的绝了,对XML如此熟悉的我,怎么没有如此地将自己的思想放飞——想起了王羲之的《兰亭集序》:夫人之相与,俯仰一世,或取诸怀抱,悟言一室之内;或因寄所托,放浪形骸之外。自己所缺乏的大概就是后者:“因寄所托放浪形骸之外”的气质,而过多地将自己困在“悟言一室之内”的狭小空间。


在作者的诱导下,XML中的tag名变成了Lisp的函数名,简单的表结构成为树结构——XML的基本结构。其实,在作者刚刚从抽屉里面拿出XML的一刹那,我已经明白了一切,但尽管如此,我的“悟”还是比作者晚了10年(这篇雄文写于2006年)。

接着,作者又端出了作为程序员人人都知道的Ant,一种自动编译配置和部署程序的工具。不过,这部分对我来讲已经是多余的了,我已经理解了作者的全部意图——除了唯一一句话:Ant之所以用XML而不是用java本身写就是因为XML的语义自定义性是所有编程语言不具备的。


当作者宣布“离Lisp越来越近”时,我的思想已经走到了前面;是的,跟着作者经历了XML的笨重语法之旅之后,就像小溪终于流入了大海,“Lisp的本质”终于呈现在我的面前,尽管我此时仍然只是个Lisp的初学者。这个本质就是:Lisp不是编程语言——而是编程元语言,它是为写代码而生,而不是为完成具体编程任务而生。要想完成具体的编程任务,世上的语言千千万,而为编程语言写代码,虽千万人吾独往矣。


Lisp是我知道最早但学习最晚的语言,这个历史甚至可以追溯到当年学COBOL的时代。不过当我意识到我应当学习这门语言时,我已经退出了编程第一线,编程学习已经不再是生活压力的一部分。学习的动力,来自于对组合子逻辑和lambda演算研究的兴趣。


如果Lisp是一种任何人都可以学习的显现的(overt)的知识,那么这个知识的背后,就一定有一条线——一条漫长的历史长河,沿着这条河回溯而上将会遇到许多历史人物——McCarthy, Church, Curry, Rosser, Kleene, Sheffer, Ramsey, Russell, Frege。当然这条河并不是一开始就是大江奔流,它也有过激流险滩,也有过看似山穷水尽,但终于,在一个山清水秀的地方,河流开始改道,河床开始宽广,从此奔泻狂涌,一发不可收。这个转折点,就是一个许多人不知道但的的确确是真正开创了历史的人物,Moses Schönfinkel ——一位乌克兰裔的俄罗斯学者。




可以说,无论是Church, Curry, von Neumann, Turing,都是在Schönfinkel的基本思想的灵感之下才产生了后来的旷世之作——可计算函数理论。不过遗憾的是,当Schönfinkel发表了他那篇创世之作<über die Bausteine der mathematischen Logik>(论数理逻辑的基本构件)之后却患上了精神疾病,从此永久退出了学术圈,最后在贫困交加中死去。


他的思想,后来被Curry全面继承,并有所发展,其后包括所有的数理科学家、Church、Rosser、von Neumann无一不是在Schönfinkel组合函数的基本思想指导下建立自己的理论的。而McCarthy,Lisp的创建人,则是把这些大师的思想具现化(incarnation)的伟大工程师。在Schönfinkel的理论中,函数就是数据,函数就是过程,没有分别,就连常数,亦可看做是函数——常数函数;就连多参函数亦可看做是数据——既可以当做参数也可以当做返回值。读着Schönfinel的天才论文,看着他那郁郁不得志的一生,又让我想起王羲之——


“每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。固知一死生为虚诞,齐彭殇为妄作。后之视今,亦犹今之视昔,悲夫!故列叙时人,录其所述。虽世殊事异,所以兴怀,其致一也。”


Schönfinkel没有看到他的论文对同时代和后来学者的影响,而他这篇论文的目的非常的谦卑——只想在谓词逻辑中取消量词使得该逻辑系统和Sheffer提出的单一连接符的命题逻辑符一致,以满足希尔伯特提出的“以最小量的原始概念和公理派生逻辑系统的所有定理”的要求。任何人没有想到的是,在这个解决方案的背后却是盘古开天地式的创新——第一次将函数作为逻辑、所有形式系统的基本元素。


可以不夸张的说,Lisp语言就是Schönfinkel那篇论文的计算机实现(implementation),其中,函数、表就是所有表达手段的基本元素。非常可惜的就是,以函数为计算模型的理论体系中,人们只知Church和lambda,只知Curry和组合子逻辑,只知Gödel和von Neumann的公理体系,有谁记得Schönfinkel?大江东去,浪淘尽千古风流人物!令人击节叹息的是,Schönfinkel,作为函数逻辑、组合子逻辑、Lisp基本思想的原创学者,在最美丽的花朵绽放之前就匆匆凋落了。


Schönfinkel不是神,而只是一个患有精神病的普通之人,但他的存在,让世人有了造神的冲动,膜拜Lisp、膜拜McCarthy,膜拜Church,膜拜Turing,膜拜一切大神。我不想造神,但是当神真的来临,我只对神背后永存的智慧,致敬!


Lisp是一门奇特的语言,是最传Schönfinkel思想之神的语言,只是这一切,我知道的太晚了。




http://blog.sciencenet.cn/blog-2349385-1039514.html

上一篇:卡尔纳普《符号逻辑及其应用导论》读书笔记书评(4)
下一篇:组合子逻辑、λ演算的历史背景和产生动机
收藏 分享 举报

2 杨波 advogato

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2017-11-19 20:06

Powered by ScienceNet.cn

Copyright © 2007-2017 中国科学报社

返回顶部