View on GitHub

Yoy-wiw

A website on lisp.

Download this project as a .zip file Download this project as a tar.gz file

咱也学学Lisp(9)–比较

11 Oct 2012

原文见:http://lisp.plasticki.com/

《创世记》上说夏娃偷吃了智慧树的果子,被上帝给惩罚了。人们读到这通常就会想到夏娃此后就懂生孩子了,其实更大的意义在于,人们此后能够分辨“善恶”了。在分辨善恶之前,先应该能够分辨“真假”。

Lisp 中有四种假:NIL,'NIL,() 和 '()。除此之外全是真,T 是真的代表,NIL 是假的代表。能够求值得到真或假的表达式,叫谓词。典型的谓词:

CL-USER> (eq 4 5)

NIL

CL-USER> (eq 'abc 'abc)

T

CL-USER> (= 100 100)

T

CL-USER> (> 100 100)

NIL

CL-USER> (<= 100 100)

T

CL-USER> (= 100 100 200)

NIL

CL-USER> (<= 100 100 200)

T

大于,小与,等于,可以串连哦。还有如下:

CL-USER> (oddp 123)

T

CL-USER> (evenp 555)

NIL

奇数还是偶数。字符串的比较:

CL-USER> (string= "nihao" "你好")

NIL

CL-USER> (string> "abcd" "abc")

3

看看一个东西是否为数字:

CL-USER> (numberp "abc")

NIL

CL-USER> (numberp 13)

T

看看一个东西是否为列表:

CL-USER> (listp 23)

NIL

CL-USER> (listp (list 4 5))

T

CL-USER> (listp nil)

T

NIL 是列表哦,那时因为:

CL-USER> (eq () NIL)

T

看看一个东西是否为NIL:

CL-USER> (null NIL)

T

CL-USER> (null T)

NIL

学会了分辨真假,下面是 IF-THEN-ELSE :

CL-USER> (if (oddp 123)

(format t "Number ~D is odd.~%" 123)

(format t "Number ~D is even.~%" 123))

Number 123 is odd.

NIL

如果 IF 后面的谓词为真,那么就做THEN的部分,否则就做ELSE的部分。

注意THEN的部分和ELSE的部分都只能是一个表达式哦。这下惨了,如果想在THEN的部分做两件事怎么办?可以这样:

CL-USER> (if (oddp 123)

(progn

(format t "Number ~D is odd.~%" 123)

(format t "Oh, my GOD.~%")

(format t "Oh, my GOD.~%"))

(format t "Number ~D is even.~%" 123))

Number 123 is odd.

Oh, my GOD.

Oh, my GOD.

NIL

用 progn 把要做的事统统括在一个括号里就OK了。