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))))))))
 |