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 pc@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.