我一直在学习Lisp以扩展我的视野,因为我听说它用于AI编程。在做了一些探索之后,我还没有找到人工智能的例子或语言中任何会使它更倾向于它的东西。
过去使用Lisp是因为它可用,还是有些东西我只是缺少?
答案 0 :(得分:120)
Lisp WAS直到20世纪80年代末才在AI中使用。然而,在80年代,Common Lisp作为“AI语言”被商业世界超卖;这种强烈反对迫使大多数AI程序员使用C ++几年。目前,原型通常用较年轻的动态语言(Perl,Python,Ruby等)编写,成功研究的实现通常是C或C ++(有时是Java)。
如果你对70年代很好奇......好吧,我不在那里。但我认为Lisp在人工智能研究方面取得了成功,原因有三个(按重要性排序):
我没有Peter Norvig's old AI book,但它应该是学习在Lisp中编写AI算法的好方法。
免责声明:我是计算语言学的研究生。我知道自然语言处理的子领域比其他领域好很多。也许Lisp在其他子域中使用得更多。
答案 1 :(得分:60)
Lisp用于AI,因为它支持非常好地计算符号的软件的实现。符号,符号表达和计算是Lisp的核心。
用符号计算的典型AI区域是:计算机代数,定理证明,计划系统,诊断,重写系统,知识表示和推理,逻辑语言,机器翻译,专家系统等。
毫不奇怪,这些领域的许多着名AI应用程序都是用Lisp编写的:
这些领域有成千上万的应用程序是用Lisp编写的。对于那些人来说非常普遍的是他们需要在符号处理领域具有特殊能力。一个在Lisp之上实现在这些域中具有特殊解释器/编译器的特殊语言。 Lisp允许人们为符号数据和程序创建表示,并且可以实现各种机制来操纵这些表达式(数学公式,逻辑公式,计划......)。
(请注意,许多其他通用编程语言也在AI中使用。我试图回答为什么特别是在AI中使用Lisp。)
答案 2 :(得分:22)
一个原因是,它允许您使用特定于您的域的构造扩展语言,使其有效地成为特定于域的语言。这项技术非常强大,因为它可以让你解释你正在解决的问题,而不是改变位。
答案 3 :(得分:12)
我的猜测一直是,作为一种功能语言,它不区分代码和数据。包括函数定义和函数调用在内的所有内容都可以视为列表,并像任何其他数据一样进行修改。
因此,可以轻松编写自检,自修改代码。
答案 4 :(得分:8)
一个可能的答案是AI是一个非常难的问题的集合,Lisp是解决难题的好语言,而不仅仅是人工智能。
至于为什么:宏,泛型函数和丰富的内省允许简洁的代码和简单的域抽象引入 - 它是一种你可以使功能更强大的语言。对于许多不必要的问题,它有自己的成本,但对于其他问题,需要力量才能取得任何进展。
答案 5 :(得分:7)
我认为仅仅考虑人工智能是错误的。如果你问为什么它被用于人工智能,而不是为什么它现在不经常被使用,那么像人工智能冬天和常见的口齿不清的商业影响就会分散注意力......
无论如何,我认为这是因为大多数AI代码基本上都是研究代码。 Lisp是一种用于探索性编程,实现困难算法,自修改和经常修改的代码的优秀语言。换句话说,对于研究代码。
我今天使用lisp作为我的一些研究代码(数学,信号处理),因为它比大多数语言更灵活,更强大,同时仍然比大多数语言生成更高效的代码。我通常可以在c ++速度的+/- 2范围内获得性能,但是我可以更快地实现事物,并且处理复杂性,如果我使用c ++,java,c#,我将花费更多的时间。 / p>
虽然这是在偏离主题。我认为AI代码主要是用普通的lisp编写的,因为它是一种研究代码的强大方法。它仍然是;但随着“AI”算法变得更好理解和探索,它们中的一部分更易于教学和使用,因此它们在本科课程中出现了年度语言。从那里开始,它成为人们已经知道的问题,可用的库,以及适用于大型团体的库。
答案 6 :(得分:6)
我猜测,一个重要原因是列表作为基本数据结构的灵活性。
当时,能够将它们变成所有类型的复合对象,并将新事物作为消息传递和多态性,使其成为首选语言;不是专门针对AI,而是针对大而复杂的任务。特别是当他们在尝试概念时。
答案 7 :(得分:4)
我认为你是对的:Lisp是一个非常方便的工具。这是因为它在程序和数据之间没有区别。这使得黑客可以非常轻松地操作函数,就像数据一样。
但是对于人类而言,lisp是非常难以阅读的,它的大括号和数据与程序之间没有区别。今天,我不会将lisp用于任何生产AI代码(或者甚至是原型),但更喜欢python用于脚本编写。
要考虑的另一件事是该语言中/与该语言相关的现有库/工具。我无法将lisp库与python库进行比较,但我认为库和开源现在比以前更重要了。
这个答案的灵感来自于lisp和python之间的以下比较:http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
答案 8 :(得分:4)
我记得听说过,作为一种函数式语言,Lisp是实现递归算法的一个很好的选择。在考虑决策制定过程(遍历)和最终结果(叶节点)时,能够追踪树并继续前进是必不可少的。
在大学的AI课程中,我告诉了我,我们学习了Lisp。
答案 9 :(得分:3)
更为愤世嫉俗的回答可能是“因为它在20世纪80年代失去了日本和美国之间的政治AI战争”。有一种乐趣blog post that speculates about the impact of the Fifth-Generation Computer System demise on the Prolog。