[iterate-devel] critique of finding such-that on-failure clause
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
participants (1)
-
Hoehle, Joerg-Cyril