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