首页 文章

为什么Lisp用于AI? [关闭]

提问于
浏览
180

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

过去使用Lisp是因为它可用,还是有些东西我只是缺少?

10 回答

  • 12

    Lisp用于AI,因为它支持非常好地计算符号的软件的实现 . 符号,符号表达和计算是Lisp的核心 .

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

    因此,使用Lisp编写这些域中的许多着名AI应用程序并不奇怪:

    • Macsyma作为第一个大型计算机代数系统 .

    • ACL2作为一种广泛使用的定理证明器,例如AMD使用的 .

    • DART作为美国军方在第一次海湾战争期间使用的物流规划者 . 据说这个Lisp应用程序仅支付了当时美国对AI研究的所有投资 .

    • SPIKE,哈勃太空望远镜的规划和调度应用程序 . 也被其他几个大型望远镜使用 .

    • CYC,最大的软件系统之一 . 人类常识知识领域的表征与推理 .

    • METAL,首批商业上使用的自然语言翻译系统之一 .

    • 美国运通' Authorizer' s助理,负责检查信用卡交易 .

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

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

  • 6

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

    至于为什么:宏,泛型函数和丰富的内省允许简洁的代码和简单的域抽象引入 - 它是一种你可以使功能更强大的语言 . 对于许多不必要的问题,它带来了自己的成本,但对于其他问题,需要力量才能取得任何进展 .

  • 7

    一个更愤世嫉俗的答案可能是"because it lost a political AI war between Japan and the USA in the 1980s" . 有一个有趣的blog post that speculates about the impact of the Fifth-Generation Computer System demise on the Prolog .

  • 4

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

    因此,可以轻松编写自检,自修改代码 .

  • 4

    我认为你是对的:Lisp是一个非常方便的工具 . 这是因为它在程序和数据之间没有区别 . 这使黑客能够非常轻松地操作函数,就像数据一样 .

    但是对于人类而言,lisp是非常难以阅读的,它的大括号和数据与程序之间没有区别 . 今天,我不会将lisp用于任何 生产环境 AI代码(或者甚至是原型),但更喜欢python用于脚本编写 .

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

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

  • 8

    我记得听说过,作为一种函数式语言,Lisp是实现递归算法的一个很好的选择 . 在考虑决策制定流程(遍历)和最终结果(叶节点)时,能够追踪树并继续前进是至关重要的 .

    在大学的AI课程中我告诉了我们,我们学习了Lisp .

  • 59

    我认为仅仅考虑AI是错误的 . 如果你问为什么它被用于人工智能,而不是为什么它现在不经常被使用,那么人工智能冬季和常见的口齿不清的商业影响等事情会分散注意力......

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

    我今天使用lisp作为我的一些研究代码(数学,信号处理),因为它比大多数语言更灵活,更强大,同时仍然比大多数语言生成更高效的代码 . 我通常可以在相当于c速度的某个时间内获得性能,但是我可以更快地实现它,并且处理复杂性,如果我使用c,java,c#,我将花费更多的时间 .

    虽然这是在偏离主题 . 我认为AI代码主要是用普通的lisp编写的,因为它是一种研究代码的强大方法 . 它仍然是;但随着“AI”算法变得更好理解和探索,它们中的一部分更易于教学和使用,因此它们在本科课程中出现了年度语言 . 从那里开始,它成为人们已经知道的问题,可用的库,以及适用于大型团体的库 .

  • 22

    一个原因是它允许您使用特定于您的域的构造扩展语言,使其有效地成为特定于域的语言 . 这种技术非常强大,因为它允许你推理你正在解决的问题,而不是关于改变比特 .

  • 118

    我猜测,一个重要原因是列表作为基本数据结构的灵活性 .

    当时,能够将它们变成所有类型的复合对象,并将新事物作为信息传递和民族主义,使其成为首选语言;不是专门针对AI,而是针对大而复杂的任务 . 特别是当他们在尝试概念时 .

  • 3

    Lisp WAS在AI中使用直到20世纪80年代末 . 然而,在80年代,Common Lisp作为“AI语言”被商业世界超卖;这种强烈反对迫使大多数AI程序员使用C语言几年 . 目前,原型通常用较年轻的动态语言(Perl,Python,Ruby等)编写,成功研究的实现通常是C或C(有时是Java) .

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

    • Lisp是一款出色的原型制作工具 . 这是很长一段时间以来最好的 . Lisp仍然很擅长解决你不知道如何解决的问题 . 该描述完美地描述了AI .

    • Lisp很好地支持符号编程 . 旧的AI也是象征性的 . 在很长一段时间内,它在这方面也是独一无二的 .

    • Lisp非常强大 . 代码/数据的区别较弱,因此它比其他语言更具可扩展性,因为您的函数和宏看起来像内置的东西 .

    我没有Peter Norvig's old AI book,但它应该是学习在Lisp中编程AI算法的好方法 .

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

相关问题