Monde des listes récursives

Ce monde vous permettra d'expérimenter avec les listes récursives, telles qu'elles ont été définies en Lisp à l'origine. Ce monde est assez similaire au BatWorld, mais vous êtes supposé écrire des fonctions récursives agissant sur des [!python|java]listes récursives. Comme [!thelang] ne propose rien de tel en natif, ce monde défini un nouveau type nommé RecList pour cela.[/!] [!scala]listes d'entiers (List[Int]).[/!]

Une telle liste peut être soit la liste vide (notée [!scala]Nil[/!][!java]null[/!][!python]None[/!]), soit un entier suivi d'une liste. Si une liste n'est pas vide, vous pouvez retrouver son premier entier avec list.head. On dit qu'on extrait alors la tête de la liste.La liste contenant ses autres éléments (tous sauf la tête) peut être retrouvée avec list.tail. On dit qu'on extrait la suite de la liste.Bien entendu, la liste vide n'a ni tête ni suite, et vous ne devriez pas tenter d'accéder à ces éléments sous peine d'obtenir un message d'erreur (particulièrement déplaisant).

Pour construire votre propre liste, vous devez concaténer une tête et une suite comme suit : [!java|python]cons(tête, suite)[/!] [!scala]tête::suite. Il se trouve que :: est un opérateur générique du langage Scala pour construire des listes.[/!]

En résumé, vous pouvez résoudre tous les exercices de cette leçon avec les constructions suivantes :