Blocks as suggested by the ISO draft [20] are supported by ECLiPSe . It is a mechanism similar to LISP's catch&throw, it allows to abandon the execution of a goal, return to a specified ancestor and call another procedure instead.