module MoreMath::CantorPairingFunction

def cantor_pairing(*xs)

def cantor_pairing(*xs)
  if xs.size == 1 and xs.first.respond_to?(:to_ary)
    xs = xs.first.to_ary
  end
  case xs.size
  when 0, 1
    raise ArgumentError, "at least two arguments are required"
  when 2
    x, y, = *xs
    (x + y) * (x + y + 1) / 2 + y
  else
    cantor_pairing(cantor_pairing(*xs[0..1]), *xs[2..-1])
  end
end