Skip to content

Instantly share code, notes, and snippets.

@Babali42
Last active March 13, 2025 15:10
Show Gist options
  • Save Babali42/6b4a004dedcfdcfb9fcfbd8c6a1a1ab9 to your computer and use it in GitHub Desktop.
Save Babali42/6b4a004dedcfdcfb9fcfbd8c6a1a1ab9 to your computer and use it in GitHub Desktop.
Faire le lien entre la programmation fonctionnel et ce que l'on voit dans le lien entre

On a des langages multi-paradigmes qui font du fonctionnel. En quoi ces langages font du fonctionnel ?

Faire le lien entre la programmation fonctionnel et ce que l'on voit dans le lien entre

Habituellement quand on parle de fonctionnel dans ces langages on parle des opérations sur les listes (map, filter, fold, reduce)

1. Avant de comprendre ce qu'est le fonctionnel il faut comprendre ce qu'est un type

Quand on déclare un élément, on lui déclare un type int, string, float

En fait le fonctionnel part d'une approche mathématique, on va avoir des éléments qui ont des types

TODO : transition

3.1 Késako la mutation

var a = 5;
a = 10;

En mathématiques la mutation n'a pas de sens. Ce concept a été reprit par la programmation fonctionnelle.

💡 Par exemple Scala utilise le mot clé val (valeur) et non pas var (variable)

2. Maintenant qu'est-ce qu'une fonction ?

Une fonction c'est un autre élément qui à un autre élément renvoie un élément.

let f:int -> int

Exemple multiplication par 2

Une fonction dans le mondre fonctionnel c'est une variable comme tout le reste.

La seule chose qui différencie une fonction d'une variable c'est son type.

2.2 On a des fonctions avec un seul paramètre, comment faire pour avoir plusieurs paramètres ?

La manière mathématique et donc fonctionnel de le définir, c'est de créer une fonction qui, à un paramètre, renvoie une nouvelle fonction

let g:int -> (int -> int)

Exemple multiplication par 2 puis addition

g a b : a+f(b)

3. Le récursif

Le récursif est l'outil itératif du fonctionnel qui permet de ne pas faire de saut ni de mutation.

3.1 Exemple : Multiplication en utilisant uniquement l'addition

function mult(a,b) {
    var result = 0;
    for _ from 0 to b {
        result = result + a;
    }
    return result;
}
let m: int -> int -> int = (a, b) => {
    return if b == 1 { a } else { m a b-1 }
}

Dans la seconde implémentation il n'y a pas d'instruction, tout est fonction, meme le if !


XX. Ouverture sur les types sommes et les types produits

i8 en fonctionnel c'est l'ensemble {-128;128]

char = {'a'... 'z']

i8 U char = {'-128; 128';'a' -> 'z'} L'union des i8 et des char donne 256 + 26 valeur possibles, donc c'est un type somme

i8 X char = {(-128, 'a')...(127, 'a')
                 ...          ...
          ...(-128, 'z')...(127, 'z')}

Le produit entre ces deux ensembles donne 256 * 26 valeur possibles, donc c'est un type produit


YY. Introduction des listes

TODO

Ouverture sur des fonctions récursives et comment elles permettent de répondre au même problème que les boucles impératives

2- Comprendre les fonctions du second ordre

3- Comprendre les listes

4- Pattern matching

Réponse à la question initiale

Les différentes fonctions itératives fonctionnels ont été créé pour faire iso while, for en programmation impérative.

Même si les langages multi paradigme n'ont pas reprit le système de typage, ils ont reprit les différentes fonctions (map, filter, reduce).

Ces différentes fonctions ne sont pas vraiment du fonctionnel.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment