为什么LISP用于AI?

我一直在学习Lisp来扩展我的视野,因为我听说它被用于人工智能编程。在做了一些探索之后,我还没有找到人工智能的例子,或者在语言中找到任何能让它更倾向于它的东西。

过去使用Lisp是因为它是可用的,还是我遗漏了什么?

87214 次浏览

我猜想一个很大的原因是列表作为基本数据结构的灵活性。

当时,能够把它们变成各种各样的复合对象,以及作为信息传递和多态的新事物,使它成为选择的语言。不是专门针对人工智能,而是针对大型、复杂的任务。尤其是当他们在做概念实验的时候。

我的猜测一直是,作为一种函数式语言,它不区分代码和数据。所有内容,包括函数定义和函数调用,都可以被视为列表,并像任何其他数据一样进行修改。

因此,可以很容易地编写自我检查、自我修改的代码。

我想你是对的:Lisp是一个方便的工具,可以用来破解东西。这是因为它没有区分程序和数据。这使得黑客可以非常容易地操纵功能,就像操纵数据一样。

但是Lisp对人类来说很难阅读,因为它有大括号,而且数据和程序之间没有区别。今天,我不会将Lisp用于任何生产AI代码(或者甚至原型开发),但我更喜欢将Python用于脚本编写。

另一件需要考虑的事情是语言中/与语言相关的现有库/工具。我无法将Lisp库与Python库进行比较,但我认为现在的库和开源比以前重要得多。

这个答案的灵感来自于Lisp和Python之间的以下比较:http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

直到20世纪80年代末,Lisp一直用于人工智能。然而,在80年代,Common Lisp被商业世界夸大为“人工智能语言”。这种反弹迫使大多数人工智能程序员在几年内使用C++。如今,原型通常是用较新的动态语言(Perl、Python、Ruby等)编写的,而成功研究的实现通常是用C或C++(有时是Java)编写的。

如果你对70年代感到好奇……好吧,我不在那里。但我认为Lisp在人工智能研究中取得成功有三个原因(按重要性排序):

  1. Lisp是一个优秀的原型开发工具。在很长一段时间内,它是最好的。Lisp在解决你还不知道如何解决的问题方面仍然很出色。这种描述完美地描述了人工智能。
  2. Lisp很好地支持符号编程。老艾也是象征性的。在很长一段时间里,它在这方面也是独一无二的。
  3. Lisp非常强大。代码/数据的区别较弱,因此_ABC_比其他语言更具可扩展性,因为您的函数和宏看起来像内置的东西。

我没有彼得·诺维格的人工智能旧书,但它应该是学习用LISP编写AI算法的好方法。

免责声明:我是一名计算语言学的研究生。我比其他领域更了解自然语言处理的子领域。也许Lisp在其他子领域中使用得更多。

一个可能的答案是,人工智能是非常困难的问题的集合,而Lisp是解决困难问题的好语言,而不仅仅是人工智能。

至于为什么会这样:宏、通用函数和丰富的内省允许简洁的代码和领域抽象的简单引入——这是一种可以使其更加强大的语言。对于很多问题来说,这是不必要的,而且它本身也有成本,但对于其他问题来说,电力是需要取得任何进展的。

一个原因是,它允许您使用特定于您的领域的构造来扩展语言,从而有效地使其成为特定于领域的语言。这种技术非常强大,因为它允许您对正在解决的问题进行推理,而不是对位进行混洗。

我记得听说,作为一种函数式语言,Lisp是实现递归算法的一个非常好的选择。在考虑决策制定过程(遍历)和最终结果(叶节点)时,能够跟踪树并向后工作是必不可少的。

这是我在大学学习Lisp的一门人工智能课程中学到的。

我认为仅从人工智能的角度来考虑这个问题是错误的。如果你问的是为什么它被用于人工智能,而不是为什么它现在不经常使用,那么像AI-Winter和对Common Lisp的商业影响这样的事情就会让人分心。

无论如何,我认为这是因为大多数人工智能代码本质上是研究代码。Lisp是一种用于探索性编程、实现困难算法、自我修改和经常修改代码的优秀语言。换句话说,对于研究代码。

我现在使用Lisp来编写我的一些研究代码(数学、信号处理),因为它比大多数语言更灵活、更强大,同时还能生成比大多数语言更高效的代码。我通常可以在C++速度的+/-2倍内获得性能,但我可以更快地实现事情,并处理复杂性,这将花费我比使用C++、Java、C#更多的时间。

不过,这有点跑题了。我认为人工智能代码在一段时间内主要是用Common Lisp编写的,因为它是一种研究代码的强大方法。现在也是。但随着“人工智能”算法被更好地理解和探索,它们中的一部分更容易教授和使用,所以它们出现在本科课程中的流行语言中。从那时起,它就变成了人们已经知道什么,什么图书馆是可用的,以及什么适合大型团体的问题。

LISP用于人工智能,因为它很好地支持使用符号进行计算的软件的实现。符号、符号表达式及其计算是LISP的核心。

使用符号进行计算的典型人工智能领域包括:计算机代数、定理证明、规划系统、诊断、重写系统、知识表示和推理、逻辑语言、机器翻译、专家系统等等。

因此,毫不奇怪,这些领域中许多著名的人工智能应用程序都是用Lisp编写的:

  • Macsyma是第一个大型计算机代数系统。
  • ACL2作为广泛使用的定理证明器,例如由AMD使用。
  • DART是美军在第一次海湾战争中使用的后勤规划器。据说,光是这个Lisp应用程序就已经收回了当时美国在人工智能研究方面的所有投资。
  • 斯派克,哈勃太空望远镜的计划和调度应用程序。也被其他几个大型望远镜使用。
  • CYC,最大的软件系统之一。人类常识知识领域的表示与推理。
  • Metal是最早投入商业使用的自然语言翻译系统之一。
  • 美国运通的授权人助理,负责检查信用卡交易。

在这些领域中,有成千上万的应用程序是用Lisp编写的。非常常见的是,他们需要在符号处理领域的特殊能力。在Lisp之上实现在这些领域中具有特殊解释器/编译器的特殊语言。LISP允许为符号数据和程序创建表示,并且可以实现各种机制来操作这些表达式(数学公式、逻辑公式、计划等)。

(请注意,许多其他通用编程语言也用于人工智能。我试图回答为什么在AI中使用Lisp.

一个更愤世嫉俗的答案可能是“因为它在20世纪80年代输掉了日本和美国之间的一场政治人工智能战争”。有一个有趣的推测第五代计算机系统消亡对Prolog的影响的博客文章