A nice assert macro. Assert macros are common in Scheme, in particular being helpful for domain checks at the beginning of a procedure to catch errors as early as possible. Compared to statically typed languages this has the advantages that the assertions are optional, and that they are not limited by the type system. SRFI 145 provides the related notion of assumptions, but the motivation there is to provide hints to optimizing compilers, and these are not required to actually signal an error.
assumeexcept that an error is guaranteed to be raised if
expris false. Conceptually shorthand for
(orthat is, evaluates
expr(error "assertion failed"
exprand returns it if true, but raises an exception otherwise. The error is augmented to include the text of the failed
expr. If no additional
msgarguments are provided then
expris scanned for free variables in non-operator positions to report values from, e.g. in
(let ((x 3)) (assert (= x (+ x 1))))the error would also report the bound value of
x. This uses the technique from Oleg Kiselyov's good assert macro, which is convenient but fallible. It is thus best to keep the body of the assertion simple, moving any predicates you need to external utilities, or provide an explicit