La difference

Fermé
moli.Bym Messages postés 29 Date d'inscription samedi 10 mars 2012 Statut Membre Dernière intervention 16 mars 2013 - 29 avril 2012 à 12:44
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 29 avril 2012 à 14:24
Bonjour,
c'est quoi la difference entre un programme fonctionnel est un programme procedural ?

merci.

2 réponses

Joe's-HELP Messages postés 1976 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 4 août 2017 544
29 avril 2012 à 13:02
Bonjour.

Une langue fonctionnelle (idéalement) te permet d'écrire une fonction mathématique, c'est-à-dire une fonction qui prend des arguments de n et renvoie une valeur. Si le programme est exécuté, cette fonction est évaluée.

Un langage procédural, d'autre part, exécute une série d'étapes séquentielles, où le programme fonctionnel serait niché. Il y a une manière de transformer la logique séquentielle en logique fonctionnelle appelée la suite passant le style.

Par conséquent, un programme purement fonctionnel rapporte toujours la même valeur pour une entrée, et l'ordre de l'évaluation n'est pas bien défini ; ce qui signifie qu'il est difficile de modeler des valeurs incertaines comme l'entrée d'utilisateur ou des valeurs aléatoires dans des langues purement fonctionnelles.

@+.
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
Modifié par KX le 29/04/2012 à 14:26
Avec une programmation procédurale on manipule des variables en mémoire, et on en modifie les valeurs dans toute une série d'instructions pour arriver au résultat. On aura donc tendance à privilégier les boucles pour modifier plusieurs fois les données.

Avec une programmation fonctionnelle on ne manipule que des valeurs qui passent directement des paramètres vers le résultat de la fonction. Tout passe donc dans la pile, ce qui incite donc plutôt une programmation récursive.

De plus la programmation fonctionnelle permet d'utiliser le lambda-calcul, c'est à dire de passer en argument des valeurs, (parfois d'autres fonctions) sans en connaitre le type, ce qui n'est pas possible en procédural puisque cette valeur devrait être stocké en mémoire et donc avoir un type précis, ce qui n'est pas nécessaire en fonctionnel.

Cela donne des programmes généralement assez différents.

Exemple : calcul de la valeur minimal d'un tableau (d'entiers de type int) en Java

int minimum(int[] tab) 
{ 
    int min = tab[0]; 
    for (int i=1; i<tab.length; i++) 
        if (tab[i]<min) 
            min = tab[i]; 
    return min; 
}

Exemple : calcul de la valeur minimal d'une liste (d'éléments quelconque) en Caml

let rec min_aux x = function 
    |[] -> x 
    |t::q -> if (t<x) 
             then min_aux t q 
             else min_aux x q;; 

let minimum = function t::q -> min_aux t q;;

Remarque : aucun de ces deux codes ne prend en compte le cas où le tableau (ou la liste) est initialement vide, alors que les deux vont planter dans ce cas particulier.
Cependant en Caml, ce cas particulier est signalé dès la conception du code...
La confiance n'exclut pas le contrôle
0