X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=macros.lisp;h=d0ba63c629d8e698cc011c6072ce82c20e7d604d;hp=1239eb46b6d7d7cce32b073edc15d0d53a23efe8;hb=a5f8c5c91b2dc670e196147b08dafa0ca23259e4;hpb=be59b033c63cc2cb0e5d516f602f6e932b128a4c diff --git a/macros.lisp b/macros.lisp index 1239eb4..d0ba63c 100644 --- a/macros.lisp +++ b/macros.lisp @@ -147,6 +147,15 @@ ,@body)) +(defmacro time-seconds (&body body) + (let ((t1 (gensym))) + `(let ((,t1 (get-internal-real-time))) + (values + (progn ,@body) + (coerce (/ (- (get-internal-real-time) ,t1) + internal-time-units-per-second) + 'double-float))))) + (defmacro time-iterations (n &body body) (let ((i (gensym)) (count (gensym))) @@ -255,8 +264,16 @@ (format t "~%~%") (values))) -(defmacro defconst (symbol value &optional doc) - `(defconstant ,symbol (if (boundp ',symbol) - (symbol-value ',symbol) - ,value) +(defmacro defconstant* (sym value &optional doc) + "Ensure VALUE is evaluated only once." + `(defconstant ,sym (if (boundp ',sym) + (symbol-value ',sym) + ,value) ,@(when doc (list doc)))) + +(defmacro defvar-unbound (sym &optional (doc "")) + "defvar with a documentation string." + `(progn + (defvar ,sym) + (setf (documentation ',sym 'variable) ,doc))) +