我一直在学习Lisp,以扩大我的视野,因为我听说它已用于AI编程。在进行了一些探索之后,我还没有找到AI实例或任何其他使它更倾向于AI的语言。
Lisp过去是因为可用而使用的,还是我只是想缺少一些东西?
我一直在学习Lisp,以扩大我的视野,因为我听说它已用于AI编程。在进行了一些探索之后,我还没有找到AI实例或任何其他使它更倾向于AI的语言。
Lisp过去是因为可用而使用的,还是我只是想缺少一些东西?
Answers:
Lisp WAS在AI中一直使用到1980年代末。然而,在80年代,Common Lisp作为“ AI语言”被推销至商业世界。这种反弹迫使大多数AI程序员使用C ++几年了。如今,原型通常是用较年轻的动态语言(Perl,Python,Ruby等)编写的,成功研究的实现通常使用C或C ++(有时是Java)。
如果您对70年代感到好奇...那么,我不在那儿。但是我认为Lisp在AI研究中取得成功的原因有三个(按重要性排序):
我没有Peter Norvig的旧AI书,但是这应该是学习用Lisp编程AI算法的好方法。
免责声明:我是计算机语言学的研究生。我知道自然语言处理的子领域比其他领域好得多。也许Lisp在其他子领域中使用更多。
Artificial Intelligence by Patrick Henry Winston
。到第二版时,该书的编程章节又分支成自己的同步书籍Lisp
。顾名思义,编程完全在中Lisp
。people.csail.mit.edu/phw/Books/LISPBACK.HTML
Lisp之所以用于AI,是因为它支持非常好的使用符号进行计算的软件的实现。符号,符号表达式以及使用它们的计算是Lisp的核心。
用于计算带符号的AI的典型领域是:计算机代数,定理证明,计划系统,诊断,重写系统,知识表示和推理,逻辑语言,机器翻译,专家系统等等。
因此,用Lisp编写这些领域中许多著名的AI应用程序就不足为奇了:
用Lisp编写的这些领域中有成千上万的应用程序。对于这些而言,非常普遍的是它们在符号处理领域需要特殊的功能。在Lisp之上,这些语言实现了在这些域中具有特殊解释器/编译器的特殊语言。Lisp允许人们为符号数据和程序创建表示形式,并且可以实现各种机制来操纵这些表达式(数学公式,逻辑公式,计划等)。
(请注意,人工智能中也使用了许多其他通用编程语言。我试图回答为什么特别在Lisp中使用AI。)
原因之一是,它允许您使用针对您的域的特定结构来扩展语言,从而有效地使其成为特定于域的语言。这种技术是非常强大的,因为它可以让你的原因有关的问题你要解决,而不是约洗牌位。
我一直猜测,作为一种功能语言,它无法区分代码和数据。包括函数定义和函数调用在内的所有内容都可以视为列表,并且可以像其他任何数据一样进行修改。
因此,可以轻松编写自检,自修改代码。
我认为仅从AI角度考虑这是错误的。如果您问为什么将AI冬季用于AI,而不是为什么它现在不经常使用,那么AI冬季和对通用Lisp的商业影响之类的事情就会让人分心。
无论如何,我认为这是因为大多数AI代码本质上是研究代码。Lisp是用于探索性编程,用于实现困难算法,用于自我修改和经常修改的代码的出色语言。换句话说,用于研究代码。
今天,我将lisp用于我的一些研究代码(数学,信号处理),因为它比大多数语言更灵活,功能更强大,同时仍比大多数语言生成更高效的代码。通常,我可以获得的性能大约为c ++速度的+/- 2,但是我可以更快地实现,并且处理复杂性要比使用c ++,java,c#花费更多的时间。
不过,这正在偏离主题。我认为AI代码主要是用普通口吻写了一段时间,因为它是一种强大的研究代码方法。它仍然是;但是随着人们对“ AI”算法的更好地理解和探索,它们的某些部分变得更加易于教授和使用,因此它们以本科生课程中的年度风味语言出现。从那里开始,这成为一个问题,人们已经知道了什么,可用的库是什么,以及对于大型团体来说什么运作良好。
我认为您是对的:Lisp是一种方便的工具。这是因为它在程序和数据之间没有太大区别。这使黑客可以非常轻松地操纵功能,就像数据一样。
但是,由于大括号和数据与程序之间的区别,lisp很难被人阅读。今天,我不会将Lisp用于任何生产AI代码(甚至可能不用于原型制作),但更希望使用python进行脚本编写。
要考虑的另一件事是与该语言相关的现有库/工具。我无法将Lisp库与python库进行比较,但我想现在库和开源的重要性比以前要重要得多。
此答案的灵感来自于Lisp和python之间的以下比较:http : //amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
更加愤世嫉俗的回答可能是“因为它在1980年代输了日本和美国之间的政治AI战争”。有一个有趣的博客文章推测了第五代计算机系统的灭亡对Prolog的影响。