def transpose
      raise Erlang::ImproperListError if improper?
      return Erlang::Nil if empty?
      return Erlang::Nil if any? { |list| list.empty? }
      heads, tails = Erlang::Nil, Erlang::Nil
      reverse_each { |list| heads, tails = heads.cons(list.head), tails.cons(list.tail) }
      return Erlang::Cons.new(heads, tails.transpose)
    end
def transpose
      raise Erlang::ImproperListError if improper?
      return Erlang::Nil if empty?
      return Erlang::Nil if any? { |list| list.empty? }
      heads, tails = Erlang::Nil, Erlang::Nil
      reverse_each { |list| heads, tails = heads.cons(list.head), tails.cons(list.tail) }
      return Erlang::Cons.new(heads, tails.transpose)
    end
Gather the first element of each nested list into a new `List`, then the second
 element of each nested list, then the third, and so on. In other words, if each
 nested list is a "row", return a `List` of "columns" instead.

 @return [List]