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 :
[!java|c]null[/!][!scala]Nil[/!][!python]None[/!]
l l.head
l.tail
valeur et d'une
liste: [!java|python]cons(valeur, liste)[/!] [!scala]
valeur::liste[/!]