ccl has a function (not a macro) called require-type, as in (1+ (require-type x 'number)). Very useful indeed.
On Sun, Sep 22, 2013 at 9:53 AM, Pascal Costanza <p...@p-cos.net> wrote: > Hi, > > It seems to me that ASSERT and CHECK-TYPE are not as convenient as they > could be. In particular, ISLISP seems to have a better alternative in > ASSURE. > > ASSURE is easy to define: > > (defmacro assure (type form) > (let ((object (copy-symbol 'object))) > `(let ((,object ,form)) > (check-type ,object ,type) > ,object))) > > The important difference is that the value of form is returned, which > allows using ASSURE inline in expressions: > > (1+ (assure number x)) > > …in place of the more lengthy: > > (progn > (check-type x number) > (1+ x)) > > Is ASSURE, or something similar, part of any utility library, like > Alexandria or the likes? > > On an unrelated note, I recently came up with the following utility macro > which I found very useful: > > (defmacro assocf (item alist &optional default &rest keys &key test > test-not key) > (declare (ignore test test-not key)) > (let ((it (copy-symbol 'it)) (cons (copy-symbol 'cons))) > `(let* ((,it ,item) (,cons (assoc ,it ,alist ,@keys))) > (unless ,cons > (setf ,cons (cons ,it ,default) > ,alist (cons ,cons ,alist))) > ,cons))) > > Again, is something like this already part of some utility library? > > > Thanks, > Pascal > > -- > Pascal Costanza > The views expressed in this email are my own, and not those of my employer. > > > > >