Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3882895
  • 博文数量: 146
  • 博客积分: 3918
  • 博客等级: 少校
  • 技术积分: 8585
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-17 13:52
个人简介

个人微薄: weibo.com/manuscola

文章分类

全部博文(146)

文章存档

2016年(3)

2015年(2)

2014年(5)

2013年(42)

2012年(31)

2011年(58)

2010年(5)

分类: 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 中文翻译版

非交互方式运行Lisp程序

     

     

阅读(9856) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

Heartwork2014-07-23 21:57:40

Bean_lee:hi,真是好久不见了,前辈。最近这半年,我装修房子,照顾宝宝,家人动手术,事情特别多,荒废了不少阿。前辈这阵子过的怎么样?

呵呵,谦虚了,目前就是瞎忙,在公司打打酱油。现在有时间可以看看你的blog,好好学习一下~

回复 | 举报

Bean_lee2014-07-23 21:10:50

Heartwork:hello,帅Lee,好久不见:)

(defun leap-year(year)
    (
        and (zerop (mod year 4))
            (or (zerop (mod year 400))
                (not (zerop (mod year 100))))
    )
 )

这段代码有点小问题吧,对于400的逻辑应该单独拿出来比较好。。。

      &nbs

hi,真是好久不见了,前辈。最近这半年,我装修房子,照顾宝宝,家人动手术,事情特别多,荒废了不少阿。前辈这阵子过的怎么样?

回复 | 举报

Heartwork2014-07-23 20:32:12

hello,帅Lee,好久不见:)

(defun leap-year(year)
    (
        and (zerop (mod year 4))
            (or (zerop (mod year 400))
                (not (zerop (mod year 100))))
    )
 )

这段代码有点小问题吧,对于400的逻辑应该单独拿出来比较好。。。

      &nbs