lisp - 人工智能开发的语言要求

标签 lisp programming-languages artificial-intelligence

Possible Duplicate:
Why is Lisp used for AI?
什么使语言适合人工智能发展?
我听说LISP和Prolog在这个领域有着广泛的应用哪些特性使它们适合人工智能?

最佳答案

总的来说,我认为人工智能“首选”语言的主要特点是,它们具有高阶编程和许多抽象工具。
我可以看到,高阶编程(aka函数作为一类对象)往往是大多数人工智能语言的一个定义特征。那篇文章是一个存根,它省略了Prologhttp://en.wikipedia.org/wiki/Higher-order_programming,它允许使用高阶“谓词”。
但基本上高阶编程的思想是你可以像传递变量一样传递函数令人惊讶的是,许多脚本语言也具有作为一级对象的功能。lisp/prolog是一种给定的人工智能语言。但其他一些人可能会感到惊讶我看过几本巨蟒的人工智能书。其中之一是http://en.wikipedia.org/wiki/Prolog我还看到了一些Ruby和Perl如果您进一步研究LISP,您会发现它的许多特性与现代脚本语言相似然而,lisp在1958年问世……所以它真的领先于它的时代。
有用于Java的AI库在Java中,可以使用类上的方法将hack函数作为第一类对象进行排序,这比LISP更难/更不方便,但也有可能在C和C++中,你有函数指针,尽管它们又比LISP更麻烦。
一旦将函数作为一类对象,就可以比其他方法更通用地编程如果没有函数作为第一类对象,则可能需要构造sum(array)product(array)来执行不同的操作但是函数作为一级对象,可以计算accumulate(array, +)accumulate(array, *)你甚至可以做accumulate(array, getDataElement, operation)。由于人工智能的定义很不明确,所以灵活性是一个很大的帮助。现在,您可以构建更通用的代码,这些代码可以更容易地以甚至不是最初设想的方式进行扩展。
lambda(现在到处都可以找到)成为一种节省输入的方法,这样就不必定义每个函数。在上一个例子中,您不必在某处创建getDataElement(arrayelement) { return arrayelement.GPA },而只需说accumulate(array, lambda element: return element.GPA, +)。因此,您不必用大量的函数污染您的命名空间,而只需调用一次或两次。
如果追溯到1958年,基本上可以选择lisp、fortran或assembly。与FORTRAN语言相比,LISP更加灵活(不幸的是效率较低),并提供了更好的抽象方法。除了作为一级对象的函数外,它还具有动态类型、垃圾收集等功能(任何脚本语言现在都有的功能)现在有更多的选择可以作为一种语言使用,尽管lisp受益于成为第一,成为每个人碰巧使用的人工智能语言。现在看看Ruby/Python/Perl/JavaScript/Java/C#/甚至最新提出的C标准,你会发现LISP的一些特性(map/reduce、lambdas、垃圾收集等)口齿不清早于20世纪50年代。
即使是现在,lisp在大多数比赛中仍然保持着一些王牌。lisp中的宏系统非常先进。在C语言中,可以使用库调用或简单的宏(基本上是文本替换)来扩展语言。在lisp中,您可以定义新的语言元素(想想自己的if语句,现在想想自己定义gui的自定义语言)。总体而言,LISP语言仍然提供主流语言尚未跟上的抽象方式当然,你可以定义你自己的C语言编译器,并添加所有你想要的语言结构,但没有人真的这么做在lisp中,程序员可以通过宏轻松地完成这项工作。此外,LISP是编译的,并且通过编程语言shootout,它通常比Perl、Python和Ruby更高效。
prolog基本上是一种用来表示事实和规则的逻辑语言。什么是专家系统,但规则和事实的集合由于在prolog中表示一组规则非常方便,因此与专家系统有明显的协同作用。
现在我认为对每个人工智能问题使用LISP/Prolog并不是既定的事实上,只需看看Java可用的众多机器学习/数据挖掘库。然而,当你在设计一个新系统的原型或者因为你不知道自己在做什么而进行实验时,用脚本语言比用静态类型的语言要容易得多。LISP是最早拥有我们认为理所当然的所有这些特性的语言基本上一开始根本没有竞争。
一般来说,学术界似乎也很喜欢函数式语言。所以口齿不清也没什么用尽管现在在这方面也有了ML、Haskell、OCaml等(其中一些语言支持多种范式……)。

关于lisp - 人工智能开发的语言要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522064/

相关文章:

java - 假设 - 支持非字符串文本中的非 ASCII 字符

c - Nim 的 Negamax 游戏出现问题

artificial-intelligence - 减少强化学习中的马尔可夫状态数量

loops - 卡在 Clojure 循环中,需要一些指导

emacs - Scheme 中最接近 Slime 的东西是什么?

lisp nth 函数不适用于 cons-cell

programming-languages - 您知道有关多种编程语言的快速引用指南吗?

c++ - 用一种语言编写的代码如何被另一种语言调用

algorithm - 需要一些帮助来理解搜索算法(A*、IDA*、DFS、BFS、IDDFS 等)

lisp - 范畴论术语中的 Lisp `quote` 特殊形式是什么?