个人微薄: weibo.com/manuscola
分类: LINUX
2013-01-24 00:34:13
学习Lisp也有一段时间了,基本在打基础,学习基本的语法,但是一直也没写个程序玩玩,当然了Helloworld 这种程序是不算了。今天写了个稍复杂的程序,运行了下,感觉不错。
我在我的Ubuntu上装了CLISP,来编译运行我的程序。先看下CLISP 环境:
进入了CLISP 交互环境,就可以执行相应的指令了。如下图:
退出CLISP环境也比较简单(quit) (exit)(bye)都可以。
这是一种使用CLISP编程的路径,可是我们不能总是用交互式的编程。作为一个C 程序员,我们习惯将源码文件编译成可执行文件。我们将我们想做的事情写成文件,然后执行。LISP也是可以的。
(defun leap-year(year) ( and (zerop (mod year 4)) (or (zerop (mod year 400)) (not (zerop (mod year 100)))) ) ) (defun month-length(year mon) (case mon ((Jan Mar May July Aug Oct Dec) 31) ((Apr June Sept Nov) 30) ((Feb) (if ( = 1 (leap-year year)) 29 28)) (otherwise "Unknown month") ) ) (format t "there are ~a days in 2012 Jan ~%" (month-length 2012 'Jan))
上面这段代码比较简单,定义了两个函数,一个函数判断是否是闰年,第二个函数根据月份的英文缩写,返回该月份的天数。最后一行调用了两个函数,返回2013年1月的天数。我将这一段代码保存成文件,month.lisp
clisp -c filename.lisp 可以编译lisp文件,会编译出同名的fas文件 filename.lisp。 除此外,还生成了lib文件,如下图所示:
执行生成的month.fas可以执行,也需要CLISP调用。如下图所示:
我接触LISP没多久,很多东西理解的还不深,请各路高手不吝赐教。
参考文献:
1 实用Common Lisp编程
2 ANSI Common Lisp 中文翻译版
3 非交互方式运行Lisp程序