跳至正文
返回首页
1970软件

Prolog 语言诞生

Alain Colmerauer 在马赛大学开发 Prolog,开创逻辑编程范式。

事件概述

1970年左右,法国马赛大学的 Alain Colmerauer 和 Philippe Roussel 开发了 Prolog(PROgrammation en LOGique)编程语言。Prolog 基于一阶逻辑的 Horn 子句,采用声明式编程风格:程序员描述问题的事实和规则,而非具体的计算步骤。Prolog 的执行引擎通过回溯搜索和统一算法自动寻找满足查询的解。这种逻辑编程范式在自然语言处理、专家系统、知识推理等领域有广泛应用,特别适合符号推理和知识表示任务。Prolog 与 LISP 一起,成为 AI 研究的重要工具语言。

深度学习笔记

背景、原理、影响与要点,一次读懂这个事件

约 3 分钟读完

背景与脉络

Alain Colmerauer 在法国马赛大学带领团队,想让计算机用法语与人对话;同期爱丁堡的 Kowalski 研究霍恩子句的过程式解释。两条线索在 1971 年 Kowalski 访问马赛后交汇:他们发现一阶逻辑的子句形式既能表示语法、又能当程序执行。1972 年,Colmerauer 与学生 Philippe Roussel 实现首个解释器,Roussel 命名语言为 Prolog(PROgrammation en LOGique)。它把“逻辑即程序”的设想落地,成为与 LISP 分庭抗礼的 AI 语言,并在日本第五代计算机计划中备受推崇。

核心要点

  • 11972 年 Colmerauer 与 Roussel 在马赛实现首个 Prolog 解释器。
  • 2理论基础来自 Kowalski 对霍恩子句“过程式解释”的洞察。
  • 3程序即一组事实与规则(霍恩子句),靠查询驱动证明。
  • 4核心机制:合一(unification)与带 chronological 回溯的深度优先搜索。
  • 5首个 Prolog 程序是法语问答系统,源自自然语言处理动机。
  • 6日本第五代计算机计划选其为基础语言,欧洲 AI 界尤爱之。

原理与技术细节

Prolog 把程序写成“事实 + 规则”,例如 parent(X,Y) :- father(X,Y). 表示“若 X 是 Y 的父亲,则 X 是 Y 的亲代”。一条规则 H :- B1, B2. 既可作逻辑命题读,也可作过程调用读:要证明 H,就去证明 B1、B2。执行一个查询时,系统用“合一”把变量与已知事实或规则头匹配,再对子目标递归证明;若某路走不通,就沿调用栈“回溯”到最近的选择点换一条路——这叫 chronological 回溯。因为默认是深度优先,Prolog 写起来像在声明“什么为真”,而非“先做什么后做什么”。类比:你描述谜面的约束,机器反向搜索满足全部约束的赋值,像解数独而非写流程。

影响与后续

Prolog 把“声明式逻辑编程”带入主流,成为专家系统、自然语言处理与自动推理的重要工具,并因日本第五代计划声名大噪。其局限在于:深度优先回溯在遇到大搜索空间时可能极慢,cut 等控制结构又破坏了纯声明性;且工业界应用规模普遍偏小。但它在约束逻辑编程、数据库查询(Datalog)、以及近年神经符号系统(如 DeepProbLog)中持续发光,证明“逻辑即程序”生命力长久。

学习要点

  • 声明“什么为真”往往比写“怎么做”更贴近问题本质。
  • 合一 + 回溯是逻辑编程引擎的两大支柱。
  • 控制结构(如 cut)会牺牲纯声明性换取效率,是工程中的常见权衡。

术语表

霍恩子句Horn clause

至多一个正文字的子句,形如 H :- B1,...,Bn,既是逻辑命题也是过程。

合一Unification

寻找使两个逻辑表达式相等的变量赋值的过程,是 Prolog 匹配的核心。

回溯Backtracking

当某条证明路径失败,沿调用栈退回最近选择点尝试替代方案的搜索机制。

相关事件