玩玩LISP试试

听说LISP历史很是悠久,看了《梦断代码》之后,想着看看LISP到底如何强大的,节日期间抽空装上LISP环境小试一下。

看一些LISP介绍时,听说了这样几条关于语言的格言:

Perl的格言:做事情永远都有不止一种方法

Python的格言:做事情只有一种方法

Lisp的格言:可编程的编程语言

先装了GNU Common Lisp,简称GCL,在Windows7中安装时有个del的脚本运行不太正常,手工del和ren后,才能正常启动,出现了亲切的命令行。

2012-10-06 14-02-59

后来又找了2个大块头的LISP开发环境,一个是Lispworks 6.0 Personal,用起来不怎么顺手,编辑器的复制、粘贴的操作习惯与Windows不太一样。另一个是Allegro Common Lisp8.2(简称ACL),这个的编辑器与Windows保持一致,不过试试LISP一般用命令行就足够了。

在这个网站中有几个简单的例子:http://lisp.plasticki.com/show?14F。据说是用来教孩子LISP语言的,汗!

一开始要适应的是前缀表达式,再一个要适应的就是无数的小括号。

(+ 2 3 4)

9

List应该是LISP最强大的功能特性了,不知道Haskell中强大的List是不是从LISP学来的?

(list (list 1 2) (list 3 4))

((1 2) (3 4))(list (list 2 3) `(list 4 5))

((2 3) (LIST 4 5))

定义一个求平均数的函数:

(defun average (a b) (/ (+ a b) 2))

对列表的操作函数:

(cons 1 '(2 3 4 5 6))

(1 2 3 4 5 6)

(append '(1 3 5 7) '(2 4 6 8))

(1 3 5 7 2 4 6 8)

又看了点string、array、defstruct、setf、setq、if、when、unless、cond、do、dolist等语法,感觉LISP并不是纯函数式编程,好像不加选择性地吸收了太多其它语法,感觉不如Haskell语言优美。

另外还查到了几个与象棋有关的LISP程序:

一个中国象棋的LISP程序

http://code.google.com/p/ywb-codes/source/browse/trunk/emacs/site-lisp/contrib/chinese-chess.el

国际象棋:

http://code.google.com/p/lispchess/source/browse/trunk/slcp.lisp

https://github.com/cwbowron/lisp-chess-engine

http://www.iqool.de/cc.html

我的LISP看来也只是玩玩而已了,有时间我再继续研究一下优美的Haskell。

原文地址:https://www.cnblogs.com/speeding/p/2712940.html