code: func (p *Prefix) Exclude(q *Prefix) []Prefix {
  	if !p.IPNet.Contains(q.IP) {
  		return nil
  	}
  	if p.Equal(q) {
  		return []Prefix{*q}
  	}
  	subsFn := subnetsIPv6
  	if p.IP.To4() != nil {
  		subsFn = subnetsIPv4
  	}
  	var ps []Prefix
  	l, r := subsFn(p, false)
  	for !l.Equal(q) && !r.Equal(q) {
  		if l.IPNet.Contains(q.IP) {
  			ps = append(ps, *r)
  			l, r = subsFn(l, true)
  		} else if r.IPNet.Contains(q.IP) {
  			ps = append(ps, *l)
  			l, r = subsFn(r, true)
  		}
  	}
  	if l.Equal(q) {
  		ps = append(ps, *r)
  	} else if r.Equal(q) {
  		ps = append(ps, *l)
  	}
  	return ps
  }
docs: // Exclude returns a list of prefixes that do not contain q.