IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages fonctionnels Discussion :

langages fonctionnels ?


Sujet :

Langages fonctionnels

  1. #1
    Membre du Club Avatar de zin_rbt
    Inscrit en
    Février 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 68
    Points : 45
    Points
    45
    Par défaut langages fonctionnels ?
    svp ,qu est ce qu'un langage fonctionnel ? et quels sont les autres types de langage .

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    qu'est ce qu'un langage fonctionnel ?
    Ma réponse rapide.

    quels sont les autres types de langage ?
    Paradigme de programmation
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    (même si le message de départ mériterait d'êter ignoré, on peut dévir la discussion)

    Citation Envoyé par SpiceGuid Voir le message
    c'est un langage qui offre les fermetures
    Donc, si on fait du C avec gcc, on a un langage fonctionnel ? La définition me semble insuffisante (mais parler de fermetures semble juste).

    Citation Envoyé par SpiceGuid Voir le message
    c'est un langage avec un sytème de typage riche, offrant l'inférence de type
    "Riche" est un terme flou et contestable. L'inférence de type ne me semble pas être un point pertinent de la définition.

    Depuis longtemps, je considère qu'un langage supporte le fonctionnel à partir du moment où les fonctions sont des objets de première classe, c'est-à-dire qu'elles sont manipulables comme n'importe quel autre type de base (donc, avoir les fonctions anonymes et l'ordre supérieur).

    il est plus fructueux d'associer une extension objets à un langage fonctionnel que le contraire
    Cette affirmation me semble plutôt contestable. J'ai l'impression que c'est comparable.

  4. #4
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Citation Envoyé par LLB
    "Riche" est un terme flou et contestable. L'inférence de type ne me semble pas être un point pertinent de la définition.
    Si ça peut être une mesure: le système de types doit être riche au point qu'il devienne difficilement supportable de ne pas être assisté par une forme d'inférence de type. Ça reste flou et contestable mais ça redevient pertinent

    Pour le reste je pense que mon billet anticipait très bien ses propres insuffisances.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  5. #5
    Membre du Club Avatar de zin_rbt
    Inscrit en
    Février 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 68
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par LLB Voir le message
    (même si le message de départ mériterait d'êter ignoré, on peut dévir la discussion)...
    pourtant ca a mérité un article

  6. #6
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Ce n'est pas que la question n'est pas intéressante, c'est que la réponse a déjà été donnée de nombreuses fois et qu'une recherche aurait suffi.

  7. #7
    Lucas Panny
    Invité(e)
    Par défaut
    Je pose ma question ici vu que l'autre fil est déjà à 5 pages
    J'ai lu le wikipédia sur le paradigme programmation et là je ne sais pas si je peux me fier à cette page car programmation fonctionnelle et programmation récursive par exemple sont-ils comparables?

    Citation Envoyé par zin_rbt
    pourtant ca a mérité un article
    Je pense aussi, vu que le blog de Damien n'explique pas

    Qu'est-ce qu'on peut faire de type de langage autre que les fameux: C, C++, Java, aujourd'hui avec le .net? La programmation fonctionnelle est-elle une technique sans if then, boucle, récursivité?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 26
    Points
    26
    Par défaut
    Je pense qu'on peut aborder le paradigme fonctionnel dans un premier temps en comprenant que «tout est fonction» (dans le même esprit que le «code is data» de LISP). Une variable devient donc une fonction ayant une valeur constante, une fonction constante de type f(x) = 1 en math. L'emploi de la récursivité dans les langages fonctionnels s'inscrit, toujours à mon avis, dans la même logique «mathématique» du paradigme.

    Peut-être que la lecture de l'article suivant : Paradigmes : Le fonctionnel, permettra d'offrir des explications moins précises et plus abordables que l'article de la wikipédia.

    [EDIT] Je viens de trouver la citation suivante de bluestorm qui me semble pertinente et certainement plus clair que ma tentative d'explication :
    En gros, un langage est considéré comme fonctionnel quand il permet de passer des fonctions comme argument ou comme valeur de retour d'une autre fonction, et qu'il favorise le style déclaratif (en gros, le fait de coder sans effets de bords ou presque).

  9. #9
    Lucas Panny
    Invité(e)
    Par défaut
    Merci pour ta réponse So.Ta mais en fait, je suis maintenant confus sur le terme paradigme?

    En fait, les langages du genre C, C++, Java, PHP sont de quel type de programmation donc?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 26
    Points
    26
    Par défaut
    Je pense que l'introduction de l'article Paradigme de la Wikipédia est assez claire à ce sujet :
    Un paradigme est une représentation du monde, une manière de voir les choses, un modèle cohérent de vision du monde qui repose sur une base définie (matrice disciplinaire, modèle théorique ou courant de pensée). C'est en quelque sorte un rail de la pensée dont les lois ne doivent pas être confondues avec un autre paradigme.
    Les langages que tu cites comme le C++, le Java et le PHP peuvent être considéré comme multi-paradigmes car on retrouve des éléments caractérisant certains paradigmes de programmation dans chacun d'entre eux. Par exemple, le C++ peut être considéré comme étant impératif et orienté objet.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut

  12. #12
    Lucas Panny
    Invité(e)
    Par défaut
    Citation Envoyé par So.Ta Voir le message
    Les langages que tu cites comme le C++, le Java et le PHP peuvent être considéré comme multi-paradigmes car on retrouve des éléments caractérisant certains paradigmes de programmation dans chacun d'entre eux. Par exemple, le C++ peut être considéré comme étant impératif et orienté objet.
    Multiparadigme? Donc un peu de tout dans ces langages. Pourquoi on ne leur ajoute pas aussi le fonctionnel au lieu de faire des langages seulement fonctionnels comme Scheme et Haskell?

    En fait, y a-t-il donc un IDE Scheme et lorsqu'on compile on obtient un .exe?

  13. #13
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Citation Envoyé par Lucas Panny Voir le message
    Pourquoi on ne leur ajoute pas aussi le fonctionnel au lieu de faire des langages seulement fonctionnels comme Scheme et Haskell?
    C'est ce qui se fait. En C++, on trouve des bibliothèques comme Boost::lambda ; dans C++1x, les fonctions anonymes arrivent en standard ; C# s'est beaucoup inspiré des langages fonctionnels pour plusieurs fonctionnalités, notamment Linq ; Ruby est très proche des langages fonctionnels ; etc.

    La différence de taille qu'il reste est : quelle approche est la plus naturelle dans chacun de ces langages ? Quel paradigme est privilégié, que ce soit dans la syntaxe ou la bibliothèque standard ? Par exemple, lorsque le symbole "=" correspond à l'assignation et que les valeurs sont mutables par défaut, cela incite à faire des effets de bord. À l'inverse, on peut regarder si utiliser des fonctions comme map est encouragé.

  14. #14
    Lucas Panny
    Invité(e)
    Par défaut
    A quoi sert donc d'utiliser les différents langages comme Haskell, Scheme, etc si le fonctionnel est utilisable dans les langages informatiques courants?

    Par curiosité, y a-t-il donc des IDE pour Haskell, Scheme, etc?

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Citation Envoyé par Lucas Panny Voir le message
    A quoi sert donc d'utiliser les différents langages comme Haskell, Scheme, etc si le fonctionnel est utilisable dans les langages informatiques courants?
    Parce que ce n'est pas juste en ajoutant des "fonction de première classes" qu'on obtient un langage qui va plaire aux habitués des "vrais" langages fonctionnels !

    Bien sûr, ce qui nous plait c'est d'avoir ces fonctions de premières classes dont on peut faire ce qu'on veut. Mais pas que ! Moi ce qui me plait avant tout, c'est une sémantique claire et sans surprise. J'entends par là que quand je regarde le programme, je le comprends. Et un des éléments des "langages fonctionnels" qui y participe est la persistance. Je m'explique:
    si j'écris quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = 3;
    f y = y + x;
    x = 5
    en supposant que la seconde ligne défini une fonction qui ajoute x à y. Qu'est ce que j'ai à la fin ? x vaut 5, ok, mais f ? Est ce que c'est la fonction qui ajoute 3 ou la fonction qui ajoute 5 ? Dans un langage fonctionnel, f sera toujours la fonction qui ajoute 3. Dans beaucoup de langages impératifs avec ajout de traits fonctionnel, f sera la fonction qui ajoute 5. C'est à dire qu'en changeant une variable, je change le sens d'une fonction, qui a pu déjà partir bien loin.

    Pour moi elle est là la vraie différence

    Et attention, je ne dis pas qu'il faut forcément utiliser des langages fonctionnels pures à la Haskell hein (quoi que je fasse en fait majoritairement du Coq )

    Par curiosité, y a-t-il donc des IDE pour Haskell, Scheme, etc?
    vim et emacs ? :p

  16. #16
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Citation Envoyé par TropMDR Voir le message
    Et un des éléments des "langages fonctionnels" qui y participe est la persistance.
    Fonctionnels... purs.
    En Caml, par exemple, les strings sont modifiables, les tableaux aussi. Si tu donnes un tableau à f, tu n'as pas de garantie de le retrouver dans le même état :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val f : int array -> int
    À l'inverse, C++ est capable de vérifier que le tableau n'est pas modifié par erreur (sauf const_cast).

    Citation Envoyé par Lucas Panny
    A quoi sert donc d'utiliser les différents langages comme Haskell, Scheme, etc si le fonctionnel est utilisable dans les langages informatiques courants?
    En fait, la question est beaucoup trop vague. Pourquoi utiliser Haskell ou Scheme plutôt que C++ ou PHP ? On parle de langages très différents, d'un côté comme de l'autre, et faire une réponse générale est difficile.
    Pour moi, la différence est le paradigme principale du langage, celui qui est le plus naturel (cela dépend du langage et de sa bibliothèque standard).

    Par curiosité, y a-t-il donc des IDE pour Haskell, Scheme, etc?
    Pour moi, c'est l'un des problèmes, ces langages manquent d'IDE de qualité. F# est maintenant intégré à Visual Studio, mais les autres n'ont rien de convaincant à mon avis. Bien sûr, il y a toujours Emacs qui est un éditeur formidable, mais il a du retard en ce qui concerne la complétion, le signalement des erreurs en temps-réel, le refactoring, etc. Pareil pour ViM.

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Points : 928
    Points
    928
    Par défaut
    Citation Envoyé par LLB Voir le message
    Fonctionnels... purs.
    Non, je parle bien de Caml. Quand je définis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type 'a tree = | Leaf | Node of 'a tree * 'a * 'a tree
    j'ai un arbre persistant.

    Par défaut, les records sont persistants.

    Quand j'écris
    je sais que x ne vaudra jamais None, et que même si on mute le contenu de v, x vaudra toujours Some v.
    Donc effectivement, on n'atteint pas le niveau de Haskell, mais il faut arrêter de croire que la persistance est l'apanage des langages purs. La persistance *est* omniprésente en caml

    Citation Envoyé par LLB Voir le message
    À l'inverse, C++ est capable de vérifier que le tableau n'est pas modifié par erreur (sauf const_cast).
    Caml aussi, avec un effort minimal (et le "sauf" ici est Obj.blah. Donc pas de sauf ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    module Const_Array =
      (struct
        type 'a t = 'a array
        let length = Array.length
        let get = Array.get
        let const a = a
        let unconst = Array.copy
      end:
      sig
        type 'a t
        val length : 'a t -> int
        val get : 'a t -> int -> 'a
        val const : 'a array -> 'a t
        val unconst : 'a t -> 'a array
      end)
    Effectivement, puisque ce n'est pas par défaut, ce n'est pas dans les libs. Mais ça reste parfaitement possible.
    J'ai l'impression qu'un certain nombre d'utilisateur d'haskell ont un peu trop vite tendance à mépriser le système de type de caml...

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    TropMDR : attention à ne pas prendre la mouche : LLB est un utilisateur de Caml lui aussi (quand il n'est pas du côté obscur de F#) et c'était plus une critique de la bibliothèques standard (c'est vrai qu'à posteriori, mettre les strings mutable c'était une belle erreur) que du langage (ou du système de type qui n'a pas grand chose à voir).


    Ceci dit, je comprends ta frustration, parce qu'il y a effectivement une forme d'élitisme de la part des langages qui se sont collés une étiquette de "pureté" qui n'est pas toujours justifiée. C'est un malheur de terminologie, mais utiliser le terme "pur / impur" pour désigner la quantité d'effet de bord a donné lieu, assez naturellement (mais surtout chez les débutants) à une idée de supériorité absolue des "purs" sur les "impurs", ce qui est un peu injuste.

    L'idée de limiter les effets de bords est très intéressante. OCaml le fait, Haskell le fait, encore plus, mais pas tout à fait ! Pas besoin de beaucoup jouer sur les mots pour dire que la non-terminaison par exemple est un effet de bord, et que la paresse (call-by-thunk) aussi... Quand on pousse les définitions, on se rend compte qu'un langage "pur" doit être un langage total, et que, chez nous pauvres piétons qui n'utilisont pas encore un assistant de preuve pour scripter notre éditeur de texte, il faut se résigner à être sale, inconsistant et fondamentalement impur. Les camliens se le voient répéter à longueur de journée donc ils ont fini par accepter la dure réalité, mais les Haskelliens se sentent parfois les chevilles gonfler...

    C'est du reste dommage car Haskell est un langage qui a plein d'autres choses intéressantes à montrer. Ce serait une grave erreur de se limiter à penser que Haskell est simplement un langage dont les utilisateurs se sentent supérieurs parce qu'ils utilisent, pour rendre leur code illisible, non pas des effets de bord mais des "monades".

  19. #19
    Lucas Panny
    Invité(e)
    Par défaut
    Avec seul le langage Haskell ou Scheme peut-on développer des applications comme Microsoft Word, un jeu vidéo?

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Oui.

    Il existe un éditeur de texte en Haskell (yi), plusieurs jeux vidéos en Haskell ou Scheme (sans compter les jeux qui sont codés dans autre langage mais scriptables dans une variante de Lisp). Historiquement le Lisp (donc plus largement que Scheme) a été pas mal utilisé par certaines (vieilles) boîtes de jeux (cf. GOAL par exemple).

    Un des meilleurs éditeurs de texte est écrit quasi-exclusivement en Emacs Lisp, un dialecte bâtard de Lisp qui a de nombreux défauts mais a permis la mise en place d'un écosystème assez unique.


    Le problème des langages marginaux c'est leur manque d'interopérabilité avec les énormes et repoussantes normes de communication du monde "mainstream". Tu trouveras moins de frameworks XML activeUML blabla dans ces langages, et ça peut rendre difficile le déploiement d'un produit qui n'utilise que ça. Par contre ils sont toujours aussi performants pour les parties intéressantes où le code doit résoudre des problèmes difficile, et pas seulement s'interfacer avec le protocole de Web Services à la mode.

Discussions similaires

  1. Quel langage fonctionnel choisir ? Caml, Lisp ou Scheme ?
    Par funtix dans le forum Langages fonctionnels
    Réponses: 85
    Dernier message: 23/04/2007, 21h03
  2. Réponses: 7
    Dernier message: 13/03/2007, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo