Johnny

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

每一种比较成熟的编程语言其实都是一门艺术,这并不会取决于他是否流行,Lisp就是这样一种语言。

Lisp,全称List Processor,即链表处理语言。Lisp中表达式为原子或者表,表达式有返回值,也就是表达式的值。是一种基于λ演算的函数式编程语言。

 

Lisp七大规则(有很多lisp实现,但是他们都要遵守这七条基本特性)

1、(quote x)返回x,我们简记为'x

2、(atom x)当x是一个原子或者空表时返回原子t,否则返回空表()。在Lisp中我们习惯用原子t表示真,而用空表()表示假。

3、通过引用(quote)一个表,我们避免它被求值。一个未被引用的表达式作为自变量,atom将其视为代码,将求出他的值

4、(eq x y)当x和y的值相同或者同为空表时返回t,否则返回空表()

5、(car x)要求x是一个表,它返回x中的第一个元素,很多实现里面使用first

6、(cdr x)同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表,很多实现里面使用rest

7、(cons x y)要求y是一个表,它返回一个表,这个表的第一个元素是x,其后是y中的所有元素

 

函数:

(defun my_max (x y)
(if (> x y) x y)
)
(my_max 1 2)

 

递归:

(defun total (x)
(if (null x)
0
(+ (first x) (total (rest x)))
)
)

高阶函数

高阶函数的最常见用法或许是 lambda 表达式,这是闭包的 Lisp 版。lambda 函数是用于将高阶函数传入 Lisp 函数的函数定义。

>(setf total '(lambda (a b) (+ a b)))
(LAMBDA (A B) (+ A B))

 

>total
(LAMBDA (A B) (+ A B))

>(apply total '(101 102))
203

>(defmacro times_two (x) (* 2 x))
TIMES_TWO

 

>(setf a 4)
4

>(times_two a)
8

 

linux下面操作

安装 sudo apt-get install lisp

运行 lisp

命令

* (quote x)

 

X
* (atom 'a)

T
* (atom '(a b c))

NIL
* (atom '())

T
* (atom (atom 'a))

T
* (atom '(atom 'a))

NIL
* (eq 'a 'a)

 

* (car '(a b))

 

A
* (cdr '(a b c))

(B C)
* (first '(a b))

A
* (rest '(a b c))

(B C)
* (cons 'a '(b c))

(A B C)
* (list 'a 'b 'c)

(A B C)
* (append '(a b) '(c d))

(A B C D)

 

reference:

  http://baike.baidu.com/view/293795.htm

  http://www.ibm.com/developerworks/cn/java/j-cb02067.html

posted on 2010-10-25 20:56  fanqiang  阅读(934)  评论(0编辑  收藏  举报
to be continued...