14 lines
717 B
Common Lisp
14 lines
717 B
Common Lisp
(in-package :alexandria)
|
|
|
|
(defun featurep (feature-expression)
|
|
"Returns T if the argument matches the state of the *FEATURES*
|
|
list and NIL if it does not. FEATURE-EXPRESSION can be any atom
|
|
or list acceptable to the reader macros #+ and #-."
|
|
(etypecase feature-expression
|
|
(symbol (not (null (member feature-expression *features*))))
|
|
(cons (check-type (first feature-expression) symbol)
|
|
(eswitch ((first feature-expression) :test 'string=)
|
|
(:and (every #'featurep (rest feature-expression)))
|
|
(:or (some #'featurep (rest feature-expression)))
|
|
(:not (assert (= 2 (length feature-expression)))
|
|
(not (featurep (second feature-expression))))))))
|