Lisp编程:为什么人工智能很多要用lisp呢?

2024-12-02 08:51:25
推荐回答(4个)
回答(1):

因为Lisp语言拥有理论上最高的演算能力,这在人工智能领域是非常重要的.

另外lisp的编程效率并不低于java等流行语言, lisp的主要问题在于
1 不适合大团队开发(宏太自由,不利于代码规范化,规范化又限制了宏...不能发挥lisp优势)
2 学习难度大,因为学lisp需要在各个抽象层次上解决同一个问题的抽象能力, 很多程序员并不具备这个天赋(这是很难锻炼出来的...) 但是这个问题在人工智能领域比较好办,研究人工智能的,喜欢人工智能的,一般都是抽象思维比较好的人,所以问题不大.

人工智能领域其实虽然逻辑复杂,但是一般都是小团队开发,因此第一个问题也不是问题了. 既然lisp的主要问题不是问题了, 那为什么不使用呢?

至于其他编程语言,不是不可以,而是对于复杂的高阶逻辑, 一个演算力不足的编程语言会付出很多额外和工作而且很容易出错. 另外递归是人工智能中非常常见的, 而主流编程语言都不支持无限递归(会堆栈溢出), lisp 支持无限尾递归而不会发生堆栈溢出.

举2个例子
让你写一个函数, 传一个整数做参数, 如果传1,就用一层for循环10次,输出比如
for(int i = 0;i<10;i++){dosomething(i);}
如果传2,就用2层循环 for(int i = 0;i<10;i++){for(int j = 0;j<10;j++){ dosomething(i,j);}}
如果传3,就3层循环ijk,传4就4层循环,传1000就1000层循环...传10万就10万层循环
用lisp这是很容易的,绝不会超过三五行代码搞定.
用java写得出来么?
另外一个例子, 高阶函数, 我们需要写一个函数,它能够生成累加器,即这个函数接受一个参数n,然后返回另一个函数,后者接受参数i,然后返回n累加了i后的值。
可能不好理解这个话,大致就相当于javascript代码:
function foo (n){return function (i){return n += i }}
用lisp写很简单,比这句javascript还简单,但是你用java写写看?
(defun foo (n)(lambda (i)(incf n i)))

回答(2):

这是因为John McCarthy本来没打算把Lisp设计成编程语言,至少不是我们现在意义上的编程语言。他的原意只是想做一种理论演算,用更简洁的方式定义图灵机。
参见:《为什么Lisp语言如此先进?》

回答(3):

人工智能,主要是数学算法,不是计算机语言是否精通
使用LISP语言编写算法,结构比较清晰,让人更能关注算法,而不是语言的结构和语法错误

回答(4):

我认为是历史原因造成的,人工智能需要的是解释性语言,在人工智能开始研究的时候,只有lisp一个是解释性语言,什么java,python都还没发明,用着用着就成习惯了,但目前lisp并不是最好的选择(开发效率太次),美国的火星探测器的程序都是java的~~~。
如果要类比,你看书店里大部分数据结构的书都喜欢用C来描述,而不是python或者java或者C#,也是这个道理。因为在我看来,语言就是个工具,基本的逻辑有了,干嘛都行,现成的东西多的语言肯定是首选,成本啊,同学