You're right from the standpoint that I hadn't noticed the similarity and should have. Your solution is probably the best yet for the example I gave.
But it's different in that reduce only works on simple lists- My main motivation for this type of command is for working with arbitrary and complex data structures, not just lists.
I guess I should clarify this a bit. In other languages (e.g. OCaml), it's conventional for each data structure to provide an iterator and a fold/reduce function. In Arc, the convention seems to be to provide iterators but not folds. The above code shows that it's sufficient only to have iterators, and a left fold can be automatically derived.
Alternatively, we could have data structures provide a left fold and automatically derive an iterator: