当前位置:  开发笔记 > 编程语言 > 正文

人工智能开发的语言要求

如何解决《人工智能开发的语言要求》经验,为你挑选了1个好方法。

总的来说,我会说我看到人们对AI语言"首选"的主要观点是他们有高阶编程以及许多抽象工具.

它是高阶编程(也称为第一类对象),它往往是大多数人工智能语言的定义特征http://en.wikipedia.org/wiki/Higher-order_programming,我可以看到.那篇文章是一个存根,它遗漏了Prolog http://en.wikipedia.org/wiki/Prolog,它允许高阶"谓词".

但基本上高阶编程是你可以像变量一样传递函数的想法.令人惊讶的是,许多脚本语言也具有作为第一类对象的功能.LISP/Prolog是AI语言.但其他一些可能会令人惊讶.我见过几本关于Python的AI书籍.其中一个是http://www.nltk.org/book.我也见过一些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从第一个受益,并成为每个人碰巧用于AI的语言.现在看看Ruby/Python/Perl/JavaScript/Java/C#/甚至最新提出的C标准,你开始看到LISP隐藏的功能(map/reduce,lambdas,垃圾收集等).LISP远远超过了1950年代的时间.

即使是现在,LISP在大部分比赛中仍然保持着一些优势.LISP中的宏系统非常先进.在C中,您可以使用库调用或简单宏(基本上是文本替换)来扩展语言.在LISP中,您可以定义新的语言元素(想想您自己的if语句,现在可以考虑使用自己的自定义语言来定义GUI).整体LISP语言仍然提供主流语言仍然没有赶上的抽象方式.当然,您可以为C定义自己的自定义编译器并添加所需的所有语言结构,但没有人真正这样做.在LISP中,程序员可以通过宏轻松完成.此外,LISP是根据编程语言编写的,它通常比Perl,Python和Ruby更有效.

Prolog基本上是一种用于表示事实和规则的逻辑语言.什么是专家系统,但规则和事实的集合.由于在Prolog中表示一堆规则非常方便,因此专家系统存在明显的协同作用.

现在我认为使用LISP/Prolog来解决每个人工智能问题并非如此.实际上,只需查看可用于Java的众多机器学习/数据挖掘库.但是,当您正在为新系统进行原型设计或正在进行实验时,因为您不知道自己在做什么,使用脚本语言比使用静态类型语言更容易.LISP是最早拥有我们认为理所当然的所有功能的语言.基本上一开始根本没有竞争.

一般来说,学术界似乎也很喜欢功能语言.因此,LISP的功能并没有什么坏处.虽然现在你也有ML,Haskell,OCaml等等(其中一些语言支持多种范例......).



1> Cervo..:

总的来说,我会说我看到人们对AI语言"首选"的主要观点是他们有高阶编程以及许多抽象工具.

它是高阶编程(也称为第一类对象),它往往是大多数人工智能语言的定义特征http://en.wikipedia.org/wiki/Higher-order_programming,我可以看到.那篇文章是一个存根,它遗漏了Prolog http://en.wikipedia.org/wiki/Prolog,它允许高阶"谓词".

但基本上高阶编程是你可以像变量一样传递函数的想法.令人惊讶的是,许多脚本语言也具有作为第一类对象的功能.LISP/Prolog是AI语言.但其他一些可能会令人惊讶.我见过几本关于Python的AI书籍.其中一个是http://www.nltk.org/book.我也见过一些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从第一个受益,并成为每个人碰巧用于AI的语言.现在看看Ruby/Python/Perl/JavaScript/Java/C#/甚至最新提出的C标准,你开始看到LISP隐藏的功能(map/reduce,lambdas,垃圾收集等).LISP远远超过了1950年代的时间.

即使是现在,LISP在大部分比赛中仍然保持着一些优势.LISP中的宏系统非常先进.在C中,您可以使用库调用或简单宏(基本上是文本替换)来扩展语言.在LISP中,您可以定义新的语言元素(想想您自己的if语句,现在可以考虑使用自己的自定义语言来定义GUI).整体LISP语言仍然提供主流语言仍然没有赶上的抽象方式.当然,您可以为C定义自己的自定义编译器并添加所需的所有语言结构,但没有人真正这样做.在LISP中,程序员可以通过宏轻松完成.此外,LISP是根据编程语言编写的,它通常比Perl,Python和Ruby更有效.

Prolog基本上是一种用于表示事实和规则的逻辑语言.什么是专家系统,但规则和事实的集合.由于在Prolog中表示一堆规则非常方便,因此专家系统存在明显的协同作用.

现在我认为使用LISP/Prolog来解决每个人工智能问题并非如此.实际上,只需查看可用于Java的众多机器学习/数据挖掘库.但是,当您正在为新系统进行原型设计或正在进行实验时,因为您不知道自己在做什么,使用脚本语言比使用静态类型语言更容易.LISP是最早拥有我们认为理所当然的所有功能的语言.基本上一开始根本没有竞争.

一般来说,学术界似乎也很喜欢功能语言.因此,LISP的功能并没有什么坏处.虽然现在你也有ML,Haskell,OCaml等等(其中一些语言支持多种范例......).

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有