# ConsWorld

This world allows you to experiment with the recursive lists, as they were first introduced in Lisp. It is very similar to the BatWorld, but you are supposed to write recursive functions working on [!python|java]recursive strings. Since [!thelang] does not provide such a construct natively, the ConsWorld defines recursive lists of type `RecList`.[/!] [!scala]lists of integers (`List[Int]`).[/!]

Any given such list is either the empty list (noted `[!scala]Nil[/!][!java]null[/!][!python]None[/!]`), or an integer followed by a list. If a list is not empty, you can retrieve its first integer with `list.head` and the list containing its other parameters with `list.tail`. Of course, the empty list has no head nor the tail, so trying to access these elements will result in an (unpleasant) error message.

To build your own list, you need to concatenate a head and a tail as follows: [!java|python]`cons(head, tail)`[/!] [!scala]`head::tail` Note that `::` is a generic operator in Scala to build lists.[/!]

So, in summary, you can solve every exercises of this lesson with the following constructs.

- The empty list:

      [!java]null[/!][!scala]Nil[/!][!python]None[/!]

- Get the first element of `l`

      l.head

- Get the rest of the list, when the first element is removed:

      l.tail

- Build a list from a `value` and a `list`: [!java|python]

      cons(value, list)

  [/!] [!scala]

      value::list

  [/!]