def combination(n)
      raise Erlang::ImproperListError if improper?
      return Erlang::Cons.new(Erlang::Nil) if n == 0
      return self if empty?
      return tail.combination(n - 1).map { |list| list.cons(head) }.append(tail.combination(n))
    end
def combination(n)
      raise Erlang::ImproperListError if improper?
      return Erlang::Cons.new(Erlang::Nil) if n == 0
      return self if empty?
      return tail.combination(n - 1).map { |list| list.cons(head) }.append(tail.combination(n))
    end
Return a `List` of all combinations of length `n` of items from this `List`.

 @example
   Erlang::List[1,2,3].combination(2)
   # => Erlang::List[
   #      Erlang::List[1, 2],
   #      Erlang::List[1, 3],
   #      Erlang::List[2, 3]]

 @return [List]