古典人工智能的邀请0 模式匹配

这些内容并非标准, 只反映了作者的个人见解.

古典人工智能是研究如何使用编程语言表达人类对于自身思考过程的高层次描述的领域. 也就是说, 它不是数学, 逻辑, 算法的附庸, 尽管它可能与这些学科有着紧密的联系. 对于编程语言的研究在古典人工智能中处于核心地位, 因为本质上古典人工智能的问题是表达力的问题. 而且, 从历史看来, 古典人工智能尤其偏爱Lisp族语言, 这很大程度上是因为其灵活性, 尤其是作为通用媒介的符号表达式 (S-exp, S-expression, symbolic expression) 的灵活性. 这使得在Lisp中嵌入语言自然而流畅.

在古典人工智能中首先发展起来的是模式匹配和基于规则的程序, 这是因为很大程度上人类的知识也是基于模式编码的. 比如modus ponens指的是如果有了P和P->Q, 就可以断言Q. 这里的P和Q是元语言的变量, 如果将其一致地替换为对象语言的句子, 就能得到modus ponens的实例. 但是使用modus ponens时, 人类并不预先知道要运用其怎样的实例, 而实际上是通过模式匹配提取出潜在的可能性, 即P和Q是什么的时候可以运用modus ponens.

另一个典型的例子是符号微分, 它也是John McCarthy设计Lisp的初衷之一, 以下是一个具体的Scheme程序.

以下是一些例子.

这个简短的程序只处理由数字, 变量, 加法, 乘法任意复合的表达式的符号微分, 但已经充分说明了问题. match是一个模式匹配的宏, 它用以解构表达式 (或者说句法树). 实际上, 该程序不过是微分法则的直接翻译而已. Alan Perlis说过一句名言, A programming language is low level when its programs require attention to the irrelevant. 古典人工智能的终极目标正是以直接的方式表达一切人类所需要表达的想法和概念, 不论其是否和计算有关.

或许一个显而易见的问题是为什么要使用编程语言进行表达. 对于作者而言, 编程语言是一种精确媒介. 在使用编程语言进行表达的过程中, 一切思维中错误和不准确的地方很容易被发现. 这对于让别人理解自己的想法也是好的. 事实上, 在数学和物理的表述中, 已经有太多不准确的地方了, 它们已经对于许多人造成了不可挽回的伤害.

你的回應