咱也学学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了。