Vous devez programmer une fonction qui prend une liste de nombres entiers en paramètre et qui rend une liste contenant les même nombres mais dans laquelle on aurait enlevé les doublons éventuels.
f([1; 2; 4; 2; 4; 3; 1]) = [1; 2; 3; 4]
ou bien [2; 4; 1; 3], etc.
L'ordre nous importe peu.
Le problème est que votre langage est un peu restrictif :
- Le langage ne permet de ne définir qu'une seule fonction à la fois.
- Cette unique fonction ne peut avoir qu'un seul paramètre (donc forcément notre liste).
- Le langage ne permet pas de définir de variable auxiliaire
- le langage ne connait que deux type de données : les entiers et les listes d'entiers
Toutefois le langage offre quelques fonctionnalités :
- Il est récursif
- Il fournit une conditionnelle if/then/else classique
- Il permet de comparer des entiers ( <, >, = )
- Il dispose d'opérations de base sur les listes :
* une fonction qui indique si une liste est vide,
* une fonction qui rend la "tête" d'une liste (son premier élément),
* une fonction qui rend la "queue" d'une liste (tous ses éléments sauf le premier)
* une constante qui vaut une liste vide.
* une fonction qui prend un entier et une liste en paramètre et qui rend une liste dont la tête est égale à l'entier passé en premier paramètre, et la queue est égale a la liste passée en second paramètre.
Est-il possible de définir notre fonction avec ce langage ?
Finalement j'aimerais que la fonction respecte aussi l'ordre d'apparition des nombres par rapport a la première liste
f([1; 2; 4; 2; 4; 3; 1]) = [1; 2; 4; 3]
Est-ce toujours possible ?
(Utilisez votre langage favori mais en le contraignant aux restrictions de l'énoncé)