为什么Lisp用于AI?

我一直在学习Lisp扩展我的视野,因为我听说它被用于AI编程。 在做了一些探索之后,我还没有findAI语言中的例子或其他任何可以使它更倾向于使用的例子。

过去是Lisp使用,因为它可用,还是有什么,我只是失踪?

Lisp被用于AI,直到20世纪80年代末。 但是在80年代,Common Lisp作为“AI语言”被超卖到了商业世界。 反弹迫使大多数AI程序员使用C ++几年。 现在,原型通常是用较年轻的dynamic语言(Perl,Python,Ruby等)编写的,成功的研究通常以C或C ++(有时是Java)实现。

如果你对70年代好奇…呃,我不在那里。 但是我认为Lisp在AI研究方面是成功的,有三个原因(按重要性sorting):

  1. Lisp是一个出色的原型工具。 这是很长一段时间的最好的。 Lisp在处理一个你不知道如何解决的问题上仍然很棒。 这个描述完美地表征了AI。
  2. Lisp支持符号编程。 老AI也是象征性的。 这在很长一段时间里也是独一无二的。
  3. Lisp非常强大。 代码/数据的区别比较弱,所以感觉比其他语言更具可扩展性,因为你的函数和macros看起来像内置的东西。

我没有Peter Norvig的旧AI书 ,但它应该是学习在Lisp中编程AIalgorithm的好方法。

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

Lisp被用于AI,因为它支持非常好地计算符号的软件的实现。 符号,符号expression式和计算是Lisp的核心。

用符号计算的典型AI领域是:计算机代数,定理certificate,计划系统,诊断,重写系统,知识表示和推理,逻辑语言,机器翻译,专家系统等等。

因此,这些领域的许多着名的AI应用程序都是用Lisp编写的:

  • Macsyma作为第一个大型计算机代数系统。
  • ACL2作为广泛使用的定理certificate器,例如AMD使用。
  • DART作为美军在第一次海湾战争中使用的后勤计划者。 据说这个Lisp应用程序当时已经为美国在AI研究方面的所有投资付了代价。
  • SPIKE,哈勃太空望远镜的计划和调度应用程序。 也用于其他几个大型望远镜。
  • CYC是最大的软件系统之一。 在人类常识知识领域的表征和推理。
  • METAL,第一个商业使用的自然语言翻译系统之一。
  • 美国运通的授权人助理,负责检查信用卡交易。

这些领域有成千上万的应用程序是用Lisp编写的。 这是非常普遍的,他们需要象征性处理领域的特殊能力。 一个实现了特殊的语言,在Lisp之上的这些域中有特殊的解释器/编译器。 Lisp允许为符号数据和程序创build表示,并可以实现各种机制来操作这些expression式(math公式,逻辑公式,计划等)。

(请注意,在AI中也使用了许多其他通用编程语言,我试图回答为什么特别是在AI中使用Lisp)。

其中一个原因是,它允许您使用特定于您的域的结构来扩展语言,使其成为特定于域的语言。 这种技术非常强大,因为它可以让你推理你正在解决的问题,而不是洗牌。

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

所以自我检查,自我修改的代码可以很容易地写出来。

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

至于为什么是这样的:macros,generics函数和丰富的内省允许简洁的代码和容易的域抽象介绍 – 这是一种语言,你可以做得更强大。 对于许多没有必要的问题,它有自己的成本,但对于其他需要权力的问题来取得进展。

我认为仅仅根据人工智能考虑这是错误的。 像AI-冬季和商业对普通lisp的影响,如果你问为什么它被用于AI,而不是为什么现在不经常使用,那么就会让人分心。

无论如何,我认为这是因为大部分的AI代码基本上是研究代码。 Lisp是探索性编程的伟大语言,用于实现困难的algorithm,用于自修改和经常修改的代码。 换句话说,用于研究代码。

今天我使用lisp来进行一些研究代码(math,信号处理),因为它比大多数语言更灵活和更强大,同时还能生成比大多数语言更高效的代码。 我通常可以将性能提高到c ++速度的+/- 2倍,但是我可以更快地实现,并且处理复杂性,如果我使用c ++,java,c#,则会花费更多的时间。

这是主题虽然漂移。 我认为AI代码主要是用通用的lisp编写的,因为它是研究代码的强大方法。 它仍然是; 但随着“AI”algorithm得到更好的理解和探索,其中一部分更容易教和使用,所以它们在本科生课程中以年度风格出现。 从那里开始,就成了人们已经知道的问题,可以使用哪些图书馆,以及对于大型团体来说效果如何。

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

当时可以把它们变成各种各样的复合物,新的东西如消息传递和多态性,使它成为select的语言; 不是专门针对AI,而是针对大型,复杂的任务。 特别是当他们在试验概念的时候。

我认为你是对的:Lisp是一个非常方便的工具。 这是因为它没有区分程序和数据。 这使得黑客可以像数据一样轻松地操作function。

但是对于人类来说,lisp是非常难以阅读的,而且数据和程序之间的界限和区别也是相同的。 今天,我不会使用lisp来生产任何AI代码(或者甚至是原型),但是会更喜欢python来编写脚本。

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

这个答案是由lisp和python之间的比较所启发的: http : //amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

我记得听说,作为一个函数式语言,Lisp是实现recursionalgorithm的一个非常好的select。 在考虑决策过程(遍历)和最终结果(叶节点)时,能够追踪一棵树并返回工作是至关重要的。

在我们学习Lisp的大学AI课程中,有人告诉我。

更为愤世嫉俗的答案可能是“因为它在20世纪80年代失去了日本和美国之间的政治AI大战”。 有一篇有趣的博客文章推测第五代计算机系统在Prolog上的影响 。