[Small-cl-src] Computed features expressions
Helmut Eller
e9626484 at stud3.tuwien.ac.at
Sat Jun 26 18:28:33 UTC 2004
;; Here's a little trick I just discovered. Dunno how portable it is.
;;
;; I often would like to write code like:
;;
;; (if <complicated-test>
;; (defun foo () <version1>)
;; (defun foo () <version2>))
;;
;; The drawback of this idiom is that FOO is no longer at toplevel.
;; If we write
;;
;; #+<complicated-test>
;; (defun foo () <version1>)
;; #-<complicated-test>
;; (defun foo () <version2>)
;;
;; FOO would be at toplevel, but <complicated-test> can only contain
;; simple feature expressions.
;;
;; But if we write
;;
;; #+#.(if <complicated-test> '(and) '(or))
;; (defun foo () <version1>)
;; #-#.(if <complicated-test> '(and) '(or))
;; (defun foo () <version2>)
;;
;; we get the advantages of both variants.
;; Define ASSQ unless it is already defined:
#+#.(cl:if (cl:fboundp 'cl-user::assq) '(or) '(and))
(defun assq (item list)
(assoc item list :test #'eq))
More information about the Small-cl-src
mailing list