每一种比较成熟的编程语言其实都是一门艺术,这并不会取决于他是否流行,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