lisp 里的条件判断


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





请使用浏览器的分享功能分享到微信等