码迷,mamicode.com
首页 > 其他好文 > 详细

Common Lisp编程初步---环境搭建和外部lisp代码运行

时间:2016-04-17 00:50:53      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

1 介绍

Lisp是世界上第二古老的语言,第一古老语言是Fortran。Lisp语言的创立者为John McCarthy,一位人工智能领域里的先驱。该语言自创立以来经历了50多年而不衰,是一种很有生命力的语言。该语言的发展和使用与CMU和MIT两所高校密不可分,在相当长的时期内是这两所高校的大学计算机课程指定语言。

在该语言创立之初,除了创建者外,还有其他的一些高校著名学者也参与到了Lisp语言的发展完善当中。于是就出现了多个Lisp的dialect,这对该语言的移植非常不便。为此在1981年丛多Lisp方面的专家和学者聚焦在一起,提出了Common Lisp (CL),意为“大家共同的Lisp语言”,旨在所有的Lisp使用者遵循共同的标准,并方便工业化应用。CL吸收了之前多个Lisp方言的优点,并添加了面向对象的功能,使得其成为了Lisp语言中使用最广泛的一种。从1981年ANSI吸收CL为标准来,1989年ANSI又更新了CL标准,这称为CL 1989,并保持对之前CL标准的兼容。对于标准中没有规定出来的,允许各编译器厂商自己的发挥。自此,CL进入了稳定的发展阶段,你会发现,在1980年代末的一些人工智能教材中的CL代码,现在仍然能够运行。

CL语言,包括Lisp的其他方言使用的不并广泛,但不能由此断定其是一种将要死亡的语言。事实上,CL是充满生机和活力的,当前也存在着利用CL搭建的大型项目。教材《人工智能:理论与实践》1是一本2003年版的影印版,其中的人工智能算法就是采用的CL语言; 著作2
《Common Lisp: A gentle Introduction to Symbolic Computation》 于2013年又出了新的更正后的电子版本。Lisp语言具有好多优良的特性,比如,Garbage Collection,动态类型,函数式编程等,现代的很多语言都在借鉴了lisp语言的一些特性,在这些方面,lisp为其他语言树立了典范。可以说,任何一个想追求卓越的程序员,都应该学习和使用一下Lisp语言。一旦你学会了该语言,你会发现其他语言对你来说变得那么的容易,这时,你已处于泰山之巅了。

另外一个现在仍在使用的一个Lisp方言为Scheme,教材《Structure and Interpretation of Computer Programs》3就是以该语言为基础讲解相关的算法。Scheme主要是一种教学型的,理论上很完美的语言,但工业化应用不足,在大型项目方面没CL应用广泛。

本文将讲解CL的环境搭建、IDE的使用、编写简单的交互程序、及将代码文件.lisp导入到IDE中并运行等方面的内容。

2 环境搭建

能够运行CL程序的环境有很多种,这里讲解一个Lispbox运行环境,你可以称它为IDE。Lispbox将emacs与cl的解释器整合在一起,从而成为一个CL的开发环境,启动以后它会自动导入一些包 (packages),方便编程人员编程。你可以从这里下载Lispbox,该网站提供了Windows、OS X、Linux三种不同操作系统下的Lispbox,你可以根据自己的需要,任选一个。

3 IDE Lispbox的使用

本文以Windows 7系统下为例讲解Lispbox的使用方法。下载后,你只要解压缩到你的文件夹下即可,不需要任何的安装过程。Lispbox是一个纯绿色的软件。

3.1 启动Lispbox

在主文件夹下,双击lispbox.bat即可启动。
技术分享

3.2 更改当前默认directory

也许你的lisp源代码不在当前目录下,这就需要在Lispbox中更改当前工作目录。这种做法是很常见的,在其他的软件,例如Matlab,R等也要学会更改目录的方法。如果你会emacs编辑器的话,你自然就会,不用继续阅读本小节。

假如我先前编写的一个lisp程序add-title.lisp存放在Lispbox主目录的my-study-lisp文件夹下,那么改到my-study-lisp文件夹下的方法为:

  1. 在命令提示符cl-user>后输入逗号;
  2. 在底部输入cd;如下图:
    技术分享
  3. 在cd后面输入回车,在出现的路径后面输入my-study-lisp,即完成我们的任务,成功后如下图:
    技术分享

4 CL编程初步

在CL中有一个术语叫REPL (Read, Evaluate, Print, Loop),这相当于Python中的交互式编程,输入一个命令,立刻显示该命令执行后的结果,支持快速开发。

4.1 一个简单的交互式程序举例

CL的语言的语法比较简单,就是将一些内容写在()中,以前缀的方式写入。比如,如下图:
技术分享
上程序是求2的平方根。

4.2 导入源文件.lisp程序到Lispbox中

我们不可能每次都在交互式下运行我们的程序,当我们的程序稳定后,自然要存入到一个文件中,这样不必每次都重新输入。这个文件的后缀,一般为lisp。接下来,我们讲解通过Lispbox怎样运行存放在lisp文件中的程序。

假如,我的源程序文件add-title.lisp的内容为 (取自《Common Lisp: A gentle Introduction to Symbolic Computation》4):

(defun titledp (name)
  (member (first name)(mr ms miss mrs)))

(setf male-first-names
      ‘(john kim richard fred george))
(setf female-first-names
      ‘(jane mary wanda barbara kim))

(defun malep (name)
  (and (member name male-first-names)
       (not (member name female-first-names))))

(defun femalep (name)
  (and (member name female-first-names)
       (not (member name male-first-names))))

(defun give-title (name)
  "Returns a name with an appropriate title on the front."
  (cond ((titledp name) name)
    ((malep (first name)) (cons ‘mr name))
    ((femalep (first name)) (cons ‘ms name))
    (t (append(mr or ms) name))))

我们采用如下命令在CL-USER后面输入(load "add-title.lisp")即可,如下图:
技术分享
上图中导入后有一些警告信息,不用担心,它们并不影响后面程序的执行。下面我们将要使用add-title程序,如下:
技术分享
程序会自动在名字的前面加上尊称,如果有尊称的话,则不再用添加,符合我们的预期。

5 结束语

CL是一种对程序员很有挑战的语言,要想学好它需下相当的功夫。但它非常好玩,且许多人工智能书籍的一些智能程序以CL为编程语言,所以,要想看懂这些书籍,实践书中的一些算法,就首先必须会用CL语言。当然,你也可以利用C++语言实现人工智能书中的算法,但是我认为最终的实现代码会比较啰嗦,没有CL的看起来直接和容易理解,更接近人们的思维。或者说C++实现的代码更接近计算机。


  1. (美)迪安 (Dean, T.)等著. 人工智能:理论与实践. 北京:电子工业出版社, 2003. ?
  2. David S. Touretzky. Common Lisp: A gentle Introduction to Symbolic Computation. Benjamin/Cummings Publishing Company, Inc, 1990. ?
  3. Harold Abelson, Gerald Jay Sussman, and Julie Sussman. Structure and Interpretation of Computer Programs. The MIT Press, Cambride, 1996. ?
  4. David S. Touretzky. Common Lisp: A gentle Introduction to Symbolic Computation. Benjamin/Cummings Publishing Company, Inc, 1990. ?

Common Lisp编程初步---环境搭建和外部lisp代码运行

标签:

原文地址:http://blog.csdn.net/robertchenguangzhi/article/details/51170591

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!