Hi,
(iter(finding 1 such-that t on-failure (error "not found"))) does not do what one might expect. Neither does (iter (finding 1 such-that t) (finally (error "not found")))
on-failure is a IMHO misnomer, because the argument is always evaluated. So it acts more like the third argument to gethash -- a default.
It's evaluated in the loop prologue. The manual does not say where on-failure is to be evaluated, but there's no easy way to move it to the epilogue because the manual states that the epilogue will be evaluated -- we'd need an extra flag to tell "in epilogue but not on successful finding".
As a result, finding such-that is rather different from (if test (leave expr)) (finally (return on-failure-expr) or (thereis (funcall test expr)) (finally (return-on-failure-expr))
Well, I think that instead of changing the current behaviour (process or not the epilogue), it's better (for compatibility) to leave it as is and to show alternatives in the manual: (thereis (evenp x)) (finally (error "not found"))) (if (evenp x) (leave x)) (finally (error "not found"))
Regards, Jörg Höhle