def init
      raise Erlang::ImproperListError if improper?
      return Erlang::Nil if tail.empty?
      out = tail = Erlang::Cons.allocate
      list = self
      until list.tail.empty?
        new_node = Erlang::Cons.allocate
        new_node.instance_variable_set(:@head, list.head)
        new_node.instance_variable_set(:@improper, false)
        tail.instance_variable_set(:@tail, new_node)
        tail.instance_variable_set(:@improper, false)
        tail.immutable!
        tail = new_node
        list = list.tail
      end
      if not tail.immutable?
        tail.instance_variable_set(:@tail, Erlang::Nil)
        tail.immutable!
      end
      return out.tail
    end
def init
      raise Erlang::ImproperListError if improper?
      return Erlang::Nil if tail.empty?
      out = tail = Erlang::Cons.allocate
      list = self
      until list.tail.empty?
        new_node = Erlang::Cons.allocate
        new_node.instance_variable_set(:@head, list.head)
        new_node.instance_variable_set(:@improper, false)
        tail.instance_variable_set(:@tail, new_node)
        tail.instance_variable_set(:@improper, false)
        tail.immutable!
        tail = new_node
        list = list.tail
      end
      if not tail.immutable?
        tail.instance_variable_set(:@tail, Erlang::Nil)
        tail.immutable!
      end
      return out.tail
    end
Return a `List` with all elements except the last one.

 @example
   Erlang::List["a", "b", "c"].init # => Erlang::List["a", "b"]

 @return [List]