爱吱声

标题: 【跟风】我的递归程序经历 [打印本页]

作者: testjhy    时间: 2025-1-20 00:13
标题: 【跟风】我的递归程序经历
本帖最后由 testjhy 于 2025-1-20 00:13 编辑
3 _& T* i9 B* M% ^  @( h: _
6 x& c8 }3 T' c+ U: p@沉宝同学[用汇编语言实现递归]可以看出他是有很好的计算机专业童子功的
1 @6 E1 F( z& [% f, x# h+ [; `3 |我大学专业核反应堆工程,小专业是反应堆控制,当年三里岛、切尔诺贝利核电站出事后,国内核电也被压制,我也逃到控制专业去读研究生,没考好被搞人工智能的导师拣了过去。人工智能当年的编程语言是Lisp,读研究生课程时,我大学时学了点Fortran,对Lisp这种什么Lamda表达等等这种计算机或者数理逻辑思维很难转弯,考试混过70多分及格算过关。最重要的是研究生院机房很小,几乎没有上机实习的机会。
. c; ], |; m6 ^, l$ C  I( o0 ]) n" @* `9 R' ~  Z2 Y  E
来到导师身边,科研条件大幅改善,主要是老师从美国回国时带来了一台IBM PC,当时整个学院机房才有那么几台PC,老师们都要分配机时,学生几乎没有可能使用,所以我们组的学生特别幸福,除去做理论的几个学生,大约只有三四个学生可以轮流使用。我在核反应堆工作时经常上夜班,所以除了正常排班使用电脑,后半夜也是我的天下。
" H. w8 ^% \; _5 J9 _2 r, n0 q
+ ^2 \' g) |( a* j4 E) B0 M我有一个好师兄,虽然来导师身边比我稍晚,但我读硕士他读的是博士,就象沉宝同学一样有很好的童子功,他辅导我用Lisp,他写汇编的能力很强,一是把反汇编Lisp语言,把英文版的Lisp汉化,在学术圈里推广。二是可能第一批写反病毒程序的,记得当年第一个计算机病毒是“Ping Pong”病毒,中毒后屏幕上有一个小球在弹跳。师兄把病毒反汇编后,找到消除或抑制它的方法,这个是商业行为,为他挣到第一桶金。多说几句,我以为他会往创业方向发展,结果他的个性有点游戏人生,在学术和市场之间行走,过几年研究方向转变为科技金融,这可是2000年早期,可惜英年早逝,经常令我无限追思。' v; s9 C3 ?; z+ {( r) R
. E1 q# |' O' v8 o/ L/ a
在师兄的帮助下,我的Lisp语言能力可以吹牛:突飞猛进。过一二年时间,在学院我师兄以下,我不惧其他别人。我其实最得意的,就是递归用得贼好。那时候,内存是512K,硬盘是10M,硬盘要被6-7个人占用,记得硬盘空间一紧张,大家都可以去别人目录下把OBJ,exe,还有常用程序删除了。递归用得好,程序就小,为了这十几K,100K的空间还斤斤计较。; I, B3 h( a( a6 o7 p0 r
+ I( A, R8 m9 L+ o6 V& B
当时我写的Lisp程序,别人看了都说妙,有些递归调用,师弟们说看得懂,要自己编起来,可能就按流程写一大堆代码。我往往是在某个关键点,设一个全局变量作为开关,直接调用自己,省略不少重复性过程,靠全局变量控制相似过程的不同部分。9 `6 ^# t, K5 o* ^) v" `
: h! W# w3 F, t, y
记得我研究过专家系统(后发展成知识系统)的开发工具,给师弟们甚至我的早期学生们讲课时,一讲到推理机,他们都觉得神秘而又好奇,都说师兄或老师你把你的推理机程序给我们看看吧。我给他们看后,发现所谓推理机实际上也就2-300行代码,利用递归写得很精炼。推理机实际上就是“搜索-验证-执行”的递归调用,象搜索部分、验证部分和执行部分也是总控下的递归调用。说完代码的思想,他们对推理机有个基本了解和破除了神秘感,对推理机深入研究和实现有了基础支撑。! C. [, Q7 G9 Q' I/ Z

4 Z; i0 T0 d  e6 \- q& [+ vLisp是解释性语言,必须在Lisp环境下运行,这对推广应用极为不利。我又转到C,C的递归调用很方便,特别是用指针方式,可能是最接近汇编的过程,但出错要检查出来也是不容易。这个阶段是Borland公司编程工具兴旺的年代,我又试着用Turbo Pascal,Pascal程序的规范性忒好,就是不支持递归。我是码农底色的研究者,后来又转到微软的Visual Studio环境,VC,VC++,甚至VB,我都写过比较大的程序,但可能此时已经偏向神经网络了,对递归程序的印象不深。' a% [( [" Z5 L$ ]7 r0 y

5 F6 Y* |* Z+ ~) W( Z: ^7 o! k好像在IBM PC时代,递归调用也是受限的,主要是堆栈和寄存器空间有限,我因为没有汇编经历,所以没有体会,而Lisp语言是解释型的,所以,它的递归调用是在Lisp内部实现的,依稀记得师兄告诉过我,Lisp启动后,首先是把PC很大一部分内存(即“堆”)圈成自己的运行空间,在这个空间上模拟出Lisp运行堆栈等人工智能程序需要加强的资源,所以我的复杂递归程序象A*算法的实现,基本没受资源限止而卡死等现象。但解释型程序与编绎执行型程序相比,速度至少要慢3-4倍,递归执行因为压栈和弹出等附加因素,比象C语言要慢得多,我有另外一个搞计算机图形学的师兄弟,当时看他的C语言编绎的程序,输出显示一行一行极快,基本上无法看清。而我们Lisp输出,感觉就是电传打印机似的,在显示器上噼里啪啦一个字一个字蹦出来。唉,回想起来既温馨又怀念。
+ Z" x8 a+ F5 _3 n! o# W  }* n. `
作者: 数值分析    时间: 2025-1-20 03:04
本帖最后由 数值分析 于 2025-1-20 03:12 编辑 $ S. t7 x& w- d: E1 i0 ^/ Z

# }) i9 b, j+ c+ g* A8 F  B看到最后一段,想起了当年和内存较劲的时候1 n, _' U. C# Q% z" ?5 G
还记得DOS的最开始的640k内存叫基本内存,因为“640kB should be enough for anyone”。再往上384k叫扩充内存,本来是保留给系统和驱动程序用的,用户用不了。但后来基本内存不够用,可以用EMM386.EXE把内存驻留程序映射到扩充内存运行。这样基本内存就可以留下大概600k来运行程序。; r4 v2 s5 N/ ]& X; m! z
再往上就是扩展内存,需要先加载HIMEM.SYS驱动才能使用。; t" v8 z+ l+ A7 ^( ~
我没有用过LISP解释器,但猜想LISP解释器的堆栈是软件实现的,不受实模式堆栈段大小默认为1kb的限制,那自然是大多了。
3 C$ r4 k1 N9 r& [; _真是好久之前的事儿了。。。
作者: 马鹿    时间: 2025-1-20 04:05
本帖最后由 马鹿 于 2025-1-19 17:19 编辑 * f4 H# X+ E* l3 _" \: u
+ a0 S  |  K0 R! A# }
我读书时候编程不惧任何人,主要是我接触编程很早,上小学就用过我爹的那个能编程basic的计算器。本科毕业我的毕业论文就有根据数据拟合的曲线 , 论文也附上了我写的code, 现在简直太容易了, 但是当时还是看起来很高级的, 我还用这个给人家攒了篇在职博士论文,所以在当年本科毕业论文是优秀毕业论文, 永久保存。
" G8 ], e1 [, V
! k+ Y9 i: n7 s6 i' T" {
作者: testjhy    时间: 2025-1-20 09:46
马鹿 发表于 2025-1-20 04:05
0 H5 h& R' g; X+ h我读书时候编程不惧任何人,主要是我接触编程很早,上小学就用过我爹的那个能编程basic的计算器。本科毕业 ...

" j/ g3 x+ U. f: [5 m# n我在反应堆上工作的时候,也有这么个可编程计算器,细长型,好象是casio的,要上千元。但那时也没玩编程,离开单位时上缴了。我孩子是不是跟你小时候一样,5、6年级学Basic编程,把数学应用题做了一遍,觉得太简单了,看不上这个专业,还顺带鄙视老爸老妈,
作者: testjhy    时间: 2025-1-20 09:52
数值分析 发表于 2025-1-20 03:04
0 n' }9 J; r$ p4 H0 p看到最后一段,想起了当年和内存较劲的时候
$ w5 j3 O/ T; e1 B8 X; g+ T还记得DOS的最开始的640k内存叫基本内存,因为“640kB should b ...

9 P* y6 ?, v( J) c0 i我们组里最初的PC内存只有512K,后来配置的有1M内存,能用到640K,硬盘也有20M了,扩充内存还有一个重要用途,虚拟硬盘,把程序用到的硬盘文件先拷贝到虚拟硬盘,程序调虚拟硬盘的文件速度贼快,
作者: 马鹿    时间: 2025-1-20 09:59
testjhy 发表于 2025-1-19 20:46+ F" R" R5 D; E) J! V+ e
我在反应堆上工作的时候,也有这么个可编程计算器,细长型,好象是casio的,要上千元。但那时也没玩编程 ...

% ]* b7 a3 H' v4 I
0 h: \: J1 F2 |; Z对,是长方形的, 挺精致的。
; K3 n5 _9 W; {
+ }7 z" g+ ~, c3 c# l( a. |我当年倒是想报计算机专业, 家里不同意, 父母觉得计算机这东西只能算工具, 不算技术。
作者: 黄序    时间: 2025-1-20 10:39
Pascal语言支持递归啊。我当年学Pascal的时候有一个大作业是那个河内塔问题,就是用递归解决的。上机调程序是在贵校的计算中心,当时学校里为数不多的空调机房,进去前还要换拖鞋穿白大褂。当时大多数男生白大褂下穿的是短裤,看上去有一种莫名的性感。* O' c* F7 n7 a; S* a. q: E' j, Z
- E0 B) G$ z$ q/ T7 M! e/ ]  R
当时计算中心里的主机有DEC的PDP-11小型机,还有一台Honeywell的忘了啥型号。也忘了我们是用哪台调的程序。2 t" `5 a$ Z7 ~8 o- p4 N

作者: 黄序    时间: 2025-1-20 10:42
本帖最后由 黄序 于 2025-1-19 21:03 编辑 , A: w2 @3 A. [4 [4 \, ]: G$ V

' z* m' z# G. b0 f* n& S5 A2 r$ u上研究生时你们隔壁的教研室里也有台IBM PC,由一个也做人工智能编程的哥们儿独享,不过他用的是Prolog语言。
6 ^) x) l8 i. v, `; p5 K+ k
' |* b* p- f8 o7 w* o当然编程之余也玩玩儿游戏,当时已经有DOS环境下的那个挖金子游戏。晚上教研室走廊里经常可以听到威廉退尔序曲的声音。  N' _% u  Q/ U( L. `6 I9 H/ C1 U: M2 a6 O
2 j! t5 W$ c, t. @% B* _, b& b
http://www.youtube.com/watch?v=l0yQfyJlqdA&t=141s
作者: 黄序    时间: 2025-1-20 10:52
高中时我第一次接触可以编程的计算机,用的是我妈为单位保管的Sharp PC-1500,本身还带一个小型打印机,被我用来打了不少函数曲线。
9 a# g$ t" ]6 P7 t0 U9 @- Y7 P0 K: p5 L
我妈算是单位里最早接触编程的技术员,开始用的是打孔卡,所以后来科室的PC-1500就由她负责保管了,我算是近水楼台。
) Q7 m; c4 R, Y+ `1 I% |8 S3 D
0 s, e/ q2 d# H说起来当年最早编程的人员里女同志比例挺高。我大学同学里有两位,各自的母亲分别是贵校和空工院计算机专业的主力,还分别主持编写了微机原理教材,在当时还流行颇广。! `: Y0 q  a  T1 b5 N
, l8 R. R* U- }9 o' t

作者: 黄序    时间: 2025-1-20 10:58

4 E1 q& P7 _, h8 l4 S! j2 \高中临毕业时家父结束在美国的进修回国,带回一台这个Commodore SX-64:
/ i; U6 F$ ]) K/ G' @: r+ g# u3 ?# V4 p& B" k
- j+ ?, E9 M% d0 W9 k5 D! L! x

- ^0 K' ^+ _+ b0 F- P5 r( \/ [& J内存64K,有个五吋软驱,五吋彩色显示器。可以用Basic编程,也可以接游戏杆打游戏。那个支架可以转动成为一个提手,这个型号貌似是最早的带彩显的“便携式”个人电脑。5 |# F: b; @  Y
4 E  H. w  N4 T$ ?! h2 @- s
% F3 ~0 c$ V8 i, P

作者: testjhy    时间: 2025-1-20 12:54
黄序 发表于 2025-1-20 10:52
8 H/ Y. d% X9 Q' x) k; D# `: ^高中时我第一次接触可以编程的计算机,用的是我妈为单位保管的Sharp PC-1500,本身还带一个小型打印机,被 ...

' K: i  T4 c2 U, Y) q9 CSharp PC-1500,yes!,我就是这个,
作者: testjhy    时间: 2025-1-20 12:56
黄序 发表于 2025-1-20 10:428 Q  v8 x/ T9 |' V
上研究生时你们隔壁的教研室里也有台IBM PC,由一个也做人工智能编程的哥们儿独享,不过他用的是Prolog语言 ...

! u3 a# }  C2 J- z! p你再把警察抓小偷给找回来,,记得还有一个十项全能。
作者: testjhy    时间: 2025-1-20 12:58
黄序 发表于 2025-1-20 10:398 G* O/ o8 _9 l) T( N9 X5 _9 R
Pascal语言支持递归啊。我当年学Pascal的时候有一个大作业是那个河内塔问题,就是用递归解决的。上机调程序 ...

, z- w. B- P# ]# `' l是turbo pascal吗?我怎么印象中不支持自我调用。
作者: 黄序    时间: 2025-1-20 13:38
testjhy 发表于 2025-1-19 22:58
% B* ~, M/ N7 @是turbo pascal吗?我怎么印象中不支持自我调用。

, d  k  n& M0 s( H不是turbo pascal
作者: 齐若散    时间: 2025-1-29 00:22

作者: 我爱潜水    时间: 2025-1-29 00:23

作者: 皇家骑警总监    时间: 2025-1-29 00:23
新年快乐
作者: jellobean    时间: 2025-1-29 00:24

作者: 北京阿新    时间: 2025-1-29 00:25
6666666666666666666666666
作者: mezhan    时间: 2025-1-29 00:28

作者: 数值分析    时间: 2025-1-29 00:28
谢谢红包                 
作者: 赫然    时间: 2025-1-29 00:31

作者: 清凉山    时间: 2025-1-29 00:34

作者: 喜欢    时间: 2025-1-29 00:43

作者: wbxy436    时间: 2025-1-29 00:52

作者: ccqi    时间: 2025-1-29 00:53
谢谢大红包
作者: 黄序    时间: 2025-1-29 00:58

作者: helloworld    时间: 2025-1-29 01:00

作者: pcb    时间: 2025-1-29 01:03

作者: indy    时间: 2025-1-29 01:17

作者: 无言    时间: 2025-1-29 01:50

作者: semtex    时间: 2025-1-29 02:18

9 s! k7 ]& `7 O- J7 q) Y. X2 j新年快乐!
作者: 沉宝    时间: 2025-1-29 02:31
Lisp启动后,首先是把PC很大一部分内存(即“堆”)圈成自己的运行空间,在这个空间上模拟出Lisp运行堆栈等人工智能程序需要加强的资源

& b/ j0 `. b- a9 g" ^; c这是必须的。PC资源有限,按照缺省配置肯定没有办法用。
# d) ~  V, O% C  l% U: r. X; L, L
3 k# F9 @2 l' o- [8 V! p. q! W1 }7 k. pLisp是基于栈(stack)的,如果计算机的硬件架构也是栈式的,当然有利于Lisp的充分发挥。可惜目前主流计算机无一例外都是寄存器型,stack machine只停留于理论中。寄存器型计算机进行栈运算,很多常用的加速手段都受到制约,比如寄存器重命名、流水线、大规模并行等等。
作者: 松叶牡丹    时间: 2025-1-29 02:39
新春快乐!蛇年大吉!
作者: 嘉洲    时间: 2025-1-29 02:50

作者: landlord    时间: 2025-1-29 03:04

作者: heinsect    时间: 2025-1-29 04:16
蛇年安康!大吉大利!
作者: IceCow    时间: 2025-1-29 04:23
新春快乐!
作者: 方恨少    时间: 2025-1-29 07:05

作者: 黄序    时间: 2025-1-29 07:53

作者: togo    时间: 2025-1-29 08:03

作者: holycow    时间: 2025-1-29 08:15

作者: 逍遥探花    时间: 2025-1-29 08:23

作者: 旺旺的考拉熊    时间: 2025-1-29 08:52
满满的回忆
作者: johnsonjian    时间: 2025-1-29 09:42

作者: 忧郁金桥    时间: 2025-1-29 09:45
祝坛友们蛇年快乐,万事如意
作者: laser    时间: 2025-1-29 09:49

作者: 宁娜    时间: 2025-1-29 09:53

作者: zhouzp    时间: 2025-1-29 10:45
新年快乐,健康幸福!
作者: 老财迷    时间: 2025-1-29 11:09
哈,想起我还学过Lisp,一堆的括号,实在是学不下去
作者: 希宝    时间: 2025-1-29 11:23

作者: 常挨揍    时间: 2025-1-29 11:45

作者: 雷达    时间: 2025-1-29 12:52

, V( r5 L% o4 B  c: C, H( U7 r春节快乐!
作者: 老爷王    时间: 2025-1-29 13:10

作者: 宝贝小猪    时间: 2025-1-29 20:51
新年快乐!
作者: 长叶林    时间: 2025-1-29 23:22

作者: moletronic    时间: 2025-1-29 23:57

作者: 喜欢    时间: 2025-1-30 00:14

作者: 宁娜    时间: 2025-1-30 06:21

作者: 野草魂    时间: 2025-1-30 06:48
恭喜新春
作者: 逍遥探花    时间: 2025-1-30 07:00

作者: Greatsnow    时间: 2025-1-30 08:15

作者: zhouzp    时间: 2025-1-30 15:13

作者: longcheng    时间: 2025-1-30 21:06
由递归程序见编程功底




欢迎光临 爱吱声 (http://129.226.69.186/bbs/) Powered by Discuz! X3.2