You may look at the implementation of intersect
here:
reduce(∩, [a, b, c, d]) == ∩(a, ∩(b, ∩(c, d)))
And the 2-argument intersect allocates a new destination each time, whereas the arbitrary elements intersect reuses the destination of 1 intersect
call and then calls intersect!
on that.