Set differences
bearophile
bearophileHUGS at lycos.com
Sun Apr 6 02:49:56 PDT 2014
Josh:
> Can anyone please explain why this works:
>
> auto numbers = sequence!("n")();
> auto trimmed = setDifference(setDifference(numbers,
> sequence!("n * a[0]")(2)), sequence!("n * a[0]")(3));
>
> but this doesn't?
>
> auto numbers = sequence!("n")();
> auto trimmed = setDifference(numbers, sequence!("n *
> a[0]")(2));
> trimmed = setDifference(trimmed, sequence!("n * a[0]")(3));
This compiles:
void main() {
import std.stdio, std.algorithm, std.range;
auto numbers = sequence!("n")();
auto trimmed = setDifference(numbers, sequence!("n *
a[0]")(2));
auto trimmed2 = setDifference(trimmed, sequence!("n *
a[0]")(3));
pragma(msg, typeof(trimmed));
pragma(msg, typeof(trimmed2));
}
Output:
SetDifference!("a < b", Sequence!("n", Tuple!()), Sequence!("n *
a[0]", Tuple!int))
SetDifference!("a < b", SetDifference!("a < b", Sequence!("n",
Tuple!()), Sequence!("n * a[0]", Tuple!int)), Sequence!("n *
a[0]", Tuple!int))
The two trimmed have different type, because in D ranges are
template-based, so often things have different type, unless they
are identical.
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list