Commentaire : avec un même langage de programmation, on peut utiliser des paradigmes différents. Dans un même programme, on peut utiliser des paradigmes différents.
Un langage déclaratif permet d’ecrire la spécification du problème et laisse le soin à l’implémentation de trouver une façon de le résoudre.
En SQL, on décrit le jeu de données, et on demande à la base de données de nous donner les données qui correspondent à notre requête.
Les objets sont des entités qui ont des propriétés et des méthodes. Les objets interagissent entre eux en utilisant ces méthodes.
La programmation fonctionnelle implique de décomposer un problème en fonctions. Ces fonctions ne possèdent pas d’état interne et ne modifient pas les données (pas d’effet de bord).
Avantages théoriques : preuves formelles plus faciles, parallélisation plus simple, modularité obligatoire, composition de fonctions plus facile.
def somme(liste):
s = 0
for x in liste:
s += x
return s
print(somme([1, 2, 3]))On écrit la somme des élément d’une liste de manière récursive.
En Haskell, on utilise une fonction somme qui prend une
liste en argument. La somme d’une liste vide est 0. La somme d’une liste
non vide est la somme du premier élément plus la somme du reste de la
liste (x:xs).
somme [] = 0
somme (x:xs) = x + somme xs
main = print (somme [1, 2, 3])En python :
def somme(liste):
if not liste:
return 0
return liste[0] + somme(liste[1:])
print(somme([1, 2, 3]))En python, on peut définir une classe Liste qui contient
une liste et une méthode somme qui calcule la somme des
éléments de la liste (= impératif dans un objet)
class Liste:
def __init__(self, liste):
self.liste = liste
def somme(self):
s = 0
for x in self.liste:
s += x
return s
l = Liste([1, 2, 3])
print(l.somme())En Java, on peut définir une classe Liste qui contient
un tableau d’entiers et une méthode somme qui calcule la
somme des éléments du tableau.
class Liste {
private int[] liste;
public Liste(int[] liste) {
this.liste = liste;
}
public int somme() {
int s = 0;
for (int x : liste) {
s += x;
}
return s;
}
}
/// Affichage
public class Main {
public static void main(String[] args) {
Liste l = new Liste(new int[]{1, 2, 3});
System.out.println(l.somme());
}
}Prolog : on décrit la somme des éléments d’une liste en Prolog. https://www.tutorialspoint.com/execute_prolog_online.php
La première ligne est le cas de base, la deuxième ligne est le cas
récursif. Le cas de base est la somme d’une liste vide, qui est 0. Le
cas récursif est la somme d’une liste non vide, qui est la somme du
premier élément plus la somme du reste de la liste
([X|Xs]).
:- initialization(main).
main :- somme([1, 2, 3], S), write(S), nl, halt.
somme([], 0).
somme([X|Xs], S) :- somme(Xs, S1), S is X + S1.Tuto prolog : http://www.gecif.net/articles/linux/prolog.html