At one time the mechanics were such that body execution would be able to make it so that a raised error as a body result would come back as the result of the overall operation. For instance, here was the behavior of REDUCE-EACH:
But conceptually, the suppression of promotion to failure should probably only be applied if it was the last iteration...otherwise a raised error might be missed. e.g. semantically we shouldn't run the 10 + 20 here and suppress the raised error:
Returning a raised error as an "early return body result" may be a possibility, but seems dubious.
Hence the current behavior is that loops do not consider errors a viable final return result...but this raises some questions on how compositions like FOR-BOTH which generically META and UNMETA their arguments handle this.
At one time the mechanics were such that body execution would be able to make it so that a raised error as a body result would come back as the result of the overall operation. For instance, here was the behavior of REDUCE-EACH:
But conceptually, the suppression of promotion to failure should probably only be applied if it was the last iteration...otherwise a raised error might be missed. e.g. semantically we shouldn't run the 10 + 20 here and suppress the raised error:
Returning a raised error as an "early return body result" may be a possibility, but seems dubious.
Hence the current behavior is that loops do not consider errors a viable final return result...but this raises some questions on how compositions like FOR-BOTH which generically META and UNMETA their arguments handle this.