TA的每日心情 | 难过 20 小时前 |
---|
签到天数: 2809 天 [LV.Master]无
|
本帖最后由 testjhy 于 2025-1-20 00:13 编辑
h. c4 z" Y! e) Y8 I0 w6 M2 z
1 {0 g+ c2 l( C@沉宝同学[用汇编语言实现递归]可以看出他是有很好的计算机专业童子功的5 r4 s- ?- n+ \7 Y3 H0 N
我大学专业核反应堆工程,小专业是反应堆控制,当年三里岛、切尔诺贝利核电站出事后,国内核电也被压制,我也逃到控制专业去读研究生,没考好被搞人工智能的导师拣了过去。人工智能当年的编程语言是Lisp,读研究生课程时,我大学时学了点Fortran,对Lisp这种什么Lamda表达等等这种计算机或者数理逻辑思维很难转弯,考试混过70多分及格算过关。最重要的是研究生院机房很小,几乎没有上机实习的机会。
; d# L6 I. \% ?% R/ v5 [ `1 Y+ C! @
6 K, B3 i% r" k& }# K+ }来到导师身边,科研条件大幅改善,主要是老师从美国回国时带来了一台IBM PC,当时整个学院机房才有那么几台PC,老师们都要分配机时,学生几乎没有可能使用,所以我们组的学生特别幸福,除去做理论的几个学生,大约只有三四个学生可以轮流使用。我在核反应堆工作时经常上夜班,所以除了正常排班使用电脑,后半夜也是我的天下。
/ |5 ^3 U4 f5 {$ [4 J2 m
7 W2 U: y5 I' f# l# v我有一个好师兄,虽然来导师身边比我稍晚,但我读硕士他读的是博士,就象沉宝同学一样有很好的童子功,他辅导我用Lisp,他写汇编的能力很强,一是把反汇编Lisp语言,把英文版的Lisp汉化,在学术圈里推广。二是可能第一批写反病毒程序的,记得当年第一个计算机病毒是“Ping Pong”病毒,中毒后屏幕上有一个小球在弹跳。师兄把病毒反汇编后,找到消除或抑制它的方法,这个是商业行为,为他挣到第一桶金。多说几句,我以为他会往创业方向发展,结果他的个性有点游戏人生,在学术和市场之间行走,过几年研究方向转变为科技金融,这可是2000年早期,可惜英年早逝,经常令我无限追思。
+ J( k3 ? _+ z! g1 C
' v) e( I, _* t/ f2 _9 s* N! W在师兄的帮助下,我的Lisp语言能力可以吹牛:突飞猛进。过一二年时间,在学院我师兄以下,我不惧其他别人。我其实最得意的,就是递归用得贼好。那时候,内存是512K,硬盘是10M,硬盘要被6-7个人占用,记得硬盘空间一紧张,大家都可以去别人目录下把OBJ,exe,还有常用程序删除了。递归用得好,程序就小,为了这十几K,100K的空间还斤斤计较。
$ M8 W2 F2 F5 w9 [9 C1 w/ ]8 H# l# f( w% ]6 \! b6 E5 k- i
当时我写的Lisp程序,别人看了都说妙,有些递归调用,师弟们说看得懂,要自己编起来,可能就按流程写一大堆代码。我往往是在某个关键点,设一个全局变量作为开关,直接调用自己,省略不少重复性过程,靠全局变量控制相似过程的不同部分。. P8 @+ H0 H X
, j- H1 u8 v' d" x- @
记得我研究过专家系统(后发展成知识系统)的开发工具,给师弟们甚至我的早期学生们讲课时,一讲到推理机,他们都觉得神秘而又好奇,都说师兄或老师你把你的推理机程序给我们看看吧。我给他们看后,发现所谓推理机实际上也就2-300行代码,利用递归写得很精炼。推理机实际上就是“搜索-验证-执行”的递归调用,象搜索部分、验证部分和执行部分也是总控下的递归调用。说完代码的思想,他们对推理机有个基本了解和破除了神秘感,对推理机深入研究和实现有了基础支撑。6 k. ^5 T& P9 T" m8 f9 v( _
+ a, J" q, ]0 k9 x7 \4 E- z; nLisp是解释性语言,必须在Lisp环境下运行,这对推广应用极为不利。我又转到C,C的递归调用很方便,特别是用指针方式,可能是最接近汇编的过程,但出错要检查出来也是不容易。这个阶段是Borland公司编程工具兴旺的年代,我又试着用Turbo Pascal,Pascal程序的规范性忒好,就是不支持递归。我是码农底色的研究者,后来又转到微软的Visual Studio环境,VC,VC++,甚至VB,我都写过比较大的程序,但可能此时已经偏向神经网络了,对递归程序的印象不深。
. d* z3 s6 N3 p# W+ R7 A
7 C' H y4 I( O0 `2 {! }& l好像在IBM PC时代,递归调用也是受限的,主要是堆栈和寄存器空间有限,我因为没有汇编经历,所以没有体会,而Lisp语言是解释型的,所以,它的递归调用是在Lisp内部实现的,依稀记得师兄告诉过我,Lisp启动后,首先是把PC很大一部分内存(即“堆”)圈成自己的运行空间,在这个空间上模拟出Lisp运行堆栈等人工智能程序需要加强的资源,所以我的复杂递归程序象A*算法的实现,基本没受资源限止而卡死等现象。但解释型程序与编绎执行型程序相比,速度至少要慢3-4倍,递归执行因为压栈和弹出等附加因素,比象C语言要慢得多,我有另外一个搞计算机图形学的师兄弟,当时看他的C语言编绎的程序,输出显示一行一行极快,基本上无法看清。而我们Lisp输出,感觉就是电传打印机似的,在显示器上噼里啪啦一个字一个字蹦出来。唉,回想起来既温馨又怀念。: ] q8 l; N. _
|
评分
-
查看全部评分
|