听说LISP历史很是悠久,看了《梦断代码》之后,想着看看LISP到底如何强大的,节日期间抽空装上LISP环境小试一下。
看一些LISP介绍时,听说了这样几条关于语言的格言:
Perl的格言:做事情永远都有不止一种方法
Python的格言:做事情只有一种方法
Lisp的格言:可编程的编程语言
先装了GNU Common Lisp,简称GCL,在Windows7中安装时有个del的脚本运行不太正常,手工del和ren后,才能正常启动,出现了亲切的命令行。
后来又找了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
我的LISP看来也只是玩玩而已了,有时间我再继续研究一下优美的Haskell。