Lazy cartesian products #114
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR makes the evaluation of cartesian products lazy in both arguments.
Previously, only the left-hand side of binary filters (such as addition) were evaluated lazily. As a consequence,
would terminate, but
would not. With this PR, both variants terminate.
As a downside, the results of the right-hand side are not cached anymore.
That is,
(0, 1) + expensive_f
will now evaluateexpensive_f
twice, whereas it was only evaluated once before.However, I suppose that the impact of this is minimal, because few people would use multiple inputs in conjunction with "expensive" functions as arguments to binary operators.