Exercices

Chapitre 4: Paradigmes de programmation*

Programmation fonctionnelle avec filter, map, reduce

  1. Bien que ces fonctions soient définies en Python, nous allons les implémenter avec les noms suivants:

    1. filtre(fonction, liste) (filter): fonction qui prend deux paramètres en entrée:
      • un fonction de décision à 1 paramètre de type simple(int pour simplifier).
      • et une liste,

    Cette fonction renvoie une nouvelle liste avec seulement les éléments ayant satisfait la fonction de décision.

    Voici quelques tests à effectuer pour vérifier son fonctionnement:

    # nb impairs
    assert filtre(lambda x: x % 2 == 1, [0, 1, 2, 3, 4]) == [1, 3]
    # nb pairs
    assert filtre(lambda x: x % 2 == 0, [0, 1, 2, 3, 4]) == [0, 2, 4]
    
    1. applique(fonction, liste) (map): fonction qui prend deux paramètres en entrée:
      • un fonction à 1 paramètre de type simple(int pour simplifier) qui renvoie une valeur.
      • et une liste,

    Cette fonction renvoie une nouvelle liste pour laquelle a été appliqué la fonction donnée en argument à chacun des éléments de la liste d’entrée.

    Voici quelques tests à effectuer pour vérifier son fonctionnement:

    # doubles
    assert applique(lambda x: x ** 2, [0, 1, 2, 3, 4]) == [0, 1, 4, 9, 16]
    # puissances de 2
    assert applique(lambda n: 2**n, [0, 1, 2, 3, 4]) == [1, 2, 4, 8, 16]
    
    1. réduit (reduce): fonction qui prend deux paramètres en entrée:
      • un fonction à 2 paramètres de type simple qui renvoie une valeur.
      • une liste.

    Cette fonction renvoie une valeur par l’accumulation des valeurs de la liste par la fonction d’accumulation donnée en argument.

    Voici quelques tests à effectuer pour vérifier son fonctionnement:

    # addition des éléments
    assert réduit(lambda x, y: x + y, [0, 1, 2, 3, 4]) == 10
    # soustraction des éléments
    assert réduit(lambda x, y: x - y, [0, 1, 2, 3, 4]) == -10
    # concaténation des éléments
    assert réduit(lambda x, y: str(x) + str(y), [0, 1, 2, 3, 4]) == "01234"
    
  2. En utilisant la fonction applique, créer en une ligne une fonction négatif qui permet de passer ce test:

    assert négatif([0, 1, 2, 3, 4]) == [0, -1, -2, -3, -4]
    
  3. En utilisant la fonction réduit, créer en une ligne une fonction longueur qui permet de passer ces tests:

    assert longueur([]) == 0
    assert longueur([0, 1, 2]) == 3
    assert longueur([0, 1, 2, 3, 4]) == 5