|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 68 ![]() |
svp ,qu est ce qu'un langage fonctionnel ? et quels sont les autres types de langage .
Merci d'avance |
|
|
00
|
|
|
#2 | ||
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
Citation:
Citation:
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
||
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
(même si le message de départ mériterait d'êter ignoré, on peut dévir la discussion)
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:
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). Citation:
|
||
|
|
00
|
|
|
#4 | |
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 512 ![]() |
Citation:
Pour le reste je pense que mon billet anticipait très bien ses propres insuffisances.
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 68 ![]() |
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
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.
|
|
|
00
|
|
|
#7 | |
|
Invité(e)
![]() Messages : n/a ![]() |
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:
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é? |
|
00
|
|
|
#8 | |
|
Membre à l'essai
![]() Inscription : avril 2008 Messages : 18 ![]() |
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 : Citation:
|
|
|
|
00
|
|
|
#9 |
|
Invité(e)
![]() Messages : n/a ![]() |
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? |
00
|
|
|
#10 | |
|
Membre à l'essai
![]() Inscription : avril 2008 Messages : 18 ![]() |
Je pense que l'introduction de l'article Paradigme de la Wikipédia est assez claire à ce sujet :
Citation:
|
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
|
|
|
10
|
|
|
#12 | |
|
Invité(e)
![]() Messages : n/a ![]() |
Citation:
En fait, y a-t-il donc un IDE Scheme et lorsqu'on compile on obtient un .exe? |
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
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é. |
|
|
|
00
|
|
|
#14 |
|
Invité(e)
![]() Messages : n/a ![]() |
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? |
00
|
|
|
#15 | ||
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Citation:
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 : 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 Citation:
|
||
|
|
00
|
|
|
#16 | |||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
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 : À l'inverse, C++ est capable de vérifier que le tableau n'est pas modifié par erreur (sauf const_cast). Citation:
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). Citation:
|
|||
|
|
00
|
|
|
#17 | |||
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Non, je parle bien de Caml. Quand je définis
Code :
type 'a tree = | Leaf | Node of 'a tree * 'a * 'a tree 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:
Code :
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... |
|||
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
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". |
|
|
00
|
|
|
#19 |
|
Invité(e)
![]() Messages : n/a ![]() |
Avec seul le langage Haskell ou Scheme peut-on développer des applications comme Microsoft Word, un jeu vidéo?
|
00
|
|
|
#20 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
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. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com