assert / check-type / assure...
Pascal Costanza
pc at p-cos.net
Sun Sep 22 13:53:53 UTC 2013
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 , at 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.
More information about the pro
mailing list