if , cond , case
and , or 也可以作为判断的一种方式
其中case 是的比对是基于eq , 所以业务上应该尽量避免基于字符串的对比。
示例:
CL-USER> (if (oddp 5 )
'odd-number
'even-number)
ODD-NUMBER
CL-USER> (if (oddp 6 )
'odd-number
'even-number)
EVEN-NUMBER
CL-USER> (defun pudding-eater (person)
(case person
((henry) (setf *arch-enemy* 'henry)
'(curse you lisp alien - you ate my pudding))
((johnny) (setf *arch-enemy* 'johnny)
'(i hope you choked on my pudding johnny))
(otherwise '(why you eat my pudding stranger ?))))
STYLE-WARNING: redefining COMMON-LISP-USER::PUDDING-EATER in DEFUN
PUDDING-EATER
CL-USER> (pudding-eater 'johnny)
(I HOPE YOU CHOKED ON MY PUDDING JOHNNY)
CL-USER> (pudding-eater 'henry)
(CURSE YOU LISP ALIEN - YOU ATE MY PUDDING)
CL-USER> (defun pudding-eater (person)
(case person
((henry) (setf *arch-enemy* 'henry)
'(curse you lisp alien - you ate my pudding))
((johnny) (setf *arch-enemy* 'johnny)
'(i hope you choked on my pudding johnny))
(otherwise '(why you eat my pudding stranger ?))))
STYLE-WARNING: redefining COMMON-LISP-USER::PUDDING-EATER in DEFUN
PUDDING-EATER
CL-USER> (pudding-eater 'johnny)
(I HOPE YOU CHOKED ON MY PUDDING JOHNNY)
CL-USER> (pudding-eater 'henry)
(CURSE YOU LISP ALIEN - YOU ATE MY PUDDING)
CL-USER> (or (oddp 5 ) (oddp 7 ) (oddp 11) (oddp 3))
T
CL-USER> (or (oddp 5 ) (oddp 7 ) (oddp 11) (oddp 3))
T
CL-USER> (and (oddp 5 ) (oddp 7 ) (oddp 11) (oddp 3))
T
CL-USER>
CL-USER> *is-it-even*
NIL
CL-USER> (defparameter *is-it-even* nil)
*IS-IT-EVEN*
CL-USER> *is-it-even*
NIL
CL-USER> (or (oddp 4 ) (setf *is-it-even* t))
T
CL-USER> *is-it-even*
T
CL-USER> (and (oddp 3) (setf *is-it-even* nil))
NIL
CL-USER> *is-it-even*
NIL
CL-USER> (setf *is-it-even* t)
T
CL-USER> (and (oddp 4) (setf *is-it-even* nil))
NIL
CL-USER> *is-it-even*
T