六十年前的 Lisp 怎么跑:PDP-1 实操入门指南

六十年前的 Lisp 怎么跑:PDP-1 实操入门指南

_

1958 年,MIT 的 John McCarthy 发明了 Lisp,这是首个专为人工智能研究设计的高级符号编程语言。PDP-1 是 DEC 于 1960 年推出的早期小型计算机,也是最早运行 Lisp 的商业硬件之一。这份入门指南不要求读者事先懂 Lisp,只展示如何在 PDP-1 上实际运行它——对历史爱好者和技术探索者来说,亲手操作六十多年前的软硬件组合,本身就是难得的经历。

背景:为什么 PDP-1 值得玩 Lisp

Lisp 1.5 是该语言的第一个成熟版本,最初运行于 IBM 7090 大型机。PDP-1 上的 Lisp 可视为一个移植版本,保留了递归、符号表达式、自动存储管理等核心特性,但受限于 PDP-1 的硬件条件(18 位字长、有限内存),实现方式有所调整。

与今天的现代 Lisp 方言不同,PDP-1 Lisp 的交互方式相当原始:输入不以回车结束,而是以一个空格触发;错误会导致系统停住,需要手动重启;数字默认使用八进制——教程中 4+4=10 就是因为十进制和八进制的差异。这些「坑」本身也是体验的一部分。

启动步骤:把 Lisp 跑起来

在 PDP-1 上启动 Lisp 有一套固定流程,核心是三部曲:挂载磁带 → 设置参数 → 连续按 CONTINUE。首先将 Extend 开关拨下,挂载 lisp.rim 磁带并按 READ IN;然后依次将 TW 开关设为 7750(定义 Lisp 存储区上限)和 400(定义推栈长度),各按一次 CONTINUE;接着拨上 Sense Switch 5 开启电传打字机输入,再次 CONTINUE;最后将地址开关设为 0004,START 后按 CONTINUE 进入 Lisp。

有个小技巧值得记住:输入 nil 并以空格结束,Lisp 会回应一个 nil,这表示系统仍在运行。如果没反应,说明系统已停住,重新 START + CONTINUE 即可。在做任何操作前先打 nil 确认,是避免误操作的好习惯。

基本运算的语法也与现代 Lisp 不同:(plus 1 2) 返回 3,(times 4 4) 返回 20——函数名是英文单词而非符号。输入程序则以 (prog ...) 结构组织,最后用 return 返回结果,关闭输入同样以空格结束。

代码的加载与保存

PDP-1 没有内置的磁带保存功能,保存代码需要先从磁带加载一个 pdef 函数。这个函数能把内存中的函数定义重新格式化输出,从而生成可写回磁带的代码。教程演示了一个完整流程:准备好代码文件后,用 encode_fiodec 工具转换成 PDP-1 可读的纸带格式,挂载后拨上 SS5 即可自动读取。

加载代码时则更简单:挂载字母数字磁带,拨下 SS5,数据自动流入系统。系统会通过打字机输出加载的函数名(如 zerop pdef count),完成后拨回 SS5 恢复键盘输入。

编注:信源为技术博客 obsolescence.dev,材料侧重实操步骤与硬件操作细节,未涉及 Lisp 1.5 完整语言规范或 McCarthy 的学术贡献。


普京称俄面临命运攸关时刻 断言西方战场战略均无法取胜 2026-06-30
欧洲高温重创电力系统 多国晚高峰电价刷新历史极值 2026-06-30