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[/!]