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 :

comparaison entre caml,lisp et scheme


Sujet :

Langages fonctionnels

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut comparaison entre caml,lisp et scheme
    bonjour,
    est ce que les concepts de langages fonctionnels tel que Fonctions d’ordre supérieur, Lazy evaluation, Pattern matching, Polytypes et inférence de types,lamda-calcul se trouvent dans Caml, lisp et sheme?
    je sais que lamda-calcul se trouve dans lisp ,scheme et ne se trouve pas dans caml mais les autre concepts???

  2. #2
    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
    Fonctions d'ordre supérieur : présent dans tous les langages fonctionnels
    Lazy evaluation : ce n'est par défaut dans aucun des 3 langages. OCaml possède des outils pour l'avoir de façon explicite (j'imagine que dans Scheme/Lisp on trouve la même chose).
    Pattern matching : OCaml, oui. Lisp/Scheme, non, pas directement (des extensions comme Qi peuvent l'ajouter).
    Polymorphisme : oui
    Inférence de type : OCaml, oui. Lisp/Scheme, ça n'a pas de sens, puisque typage dynamique (mais Qi peut l'ajouter).
    Le lamda-calcul est en natif dans OCaml.

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Si tu cherches un langage purement fonctionnel, tourne toi vers Haskell, c'est le seul langage fonctionnel pur à évaluation paresseuse à l'exception de Clean.
    Haskell a un système de type très riche, plus que Caml (bien qu'il n'ait pas d'objet comme OCaml, c'est à dire pas de sous-typage), de l'inférence de type presque totale, des fonctions d'ordre supérieur, de l'évaluation paresseuse par défaut, basé sur un lambda-calcul typé, pattern-matching...
    Tu peux jeter un coup d'oeil à notre forum Haskell pour plus d'information et quelques ressources.

    --
    Jedaï

  4. #4
    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
    Attention, les premières versions de Lisp (et encore certaines de nos jours, hum hum elisp) utilisaient une portée dynamique, alors que le lambda-calcule utilise une portée lexicale. Ce n'était donc pas un véritable lambda-calcul. Scheme relève un peu tout ça.

    Ce que tu décris ressemble plus à un langage fonctionnel statiquement typé (polymorphisme, pattern matching...) : OCaml, SML, Haskell, Clean, etc. Si tu veux en plus de l'évaluation paresseuse comme stratégie par défaut, Haskell est en effet un bon choix (de plus c'est sans doute celui qui sert la le plus été utilisé comme "jouet" par les gens qui testent des fonctionnalités louches pour le système de typage; du coup c'est un peu bloated mais bon, on ne peut pas tout avoir).

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par LLB Voir le message
    Le lamda-calcul est en natif dans OCaml.
    mais j'ai trouvé cette notion dans lisp, puisque j'ai fait une étude sur les 3 langages

  6. #6
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Oui, et ben écoute un peu ce qu'on te dit : en OCaml, tu la trouves en dûr, en vrai ! mais avec une syntaxe différente.

    Honnêtement, quand tu connais un tout petit peu, même si tu ne les as jamais vus, les gens qui ont fait Caml, tu ne peux pas en douter !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  7. #7
    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
    Ceci dit, il faut reconnaître que pour l'étude du simple lambda-calcul, l'évaluation paresseuse est plus pratique puisqu'elle a l'avantage de terminer quand c'est possible. Après si on veut étudier spécifiquement le call-by-value, OCaml est sans doute plus adapté (même si Haskell peut le faire avec les opérateurs stricts, tout comme OCaml peut expliciter une stratégie paresseuse), et dans la plupart des cas la stratégie d'évaluation ne joue pas (donc il suffit de prendre celui des deux qu'on connaît et de s'amuser, en essayant de ne pas laisser le typage nous brutaliser), mais par exemple si tu veux écrire un combinateur de point fixe lambda-calcul-esque, c'est légèrement plus facile en call-by-name ou équivalent.

    Après, il y a aussi des désavantages "de fond" qui viennent avec la paresse, comme les problèmes de lifting : si on veut avoir un point de vue simple sur les types algébriques, qu'on est jeune et innocent et qu'on pense que quand A et B ont un nombre finis Na et Nb d'habitants, alors A * B devrait en avoir (Na * Nb), il vaut mieux utiliser un langage strict.

    Le mieux serait encore d'utiliser un langage total, mais donner Coq au gentil curieux débutant, ça s'apparente sans doute à de la maltraitance.

  8. #8
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par bluestorm Voir le message
    Le mieux serait encore d'utiliser un langage total, mais donner Coq au gentil curieux débutant, ça s'apparente sans doute à de la maltraitance.
    Et FoCal ?

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par bluestorm Voir le message
    Attention, les premières versions de Lisp (et encore certaines de nos jours, hum hum elisp) utilisaient une portée dynamique, [...] Scheme relève un peu tout ça.[...]
    c'est un peu plus complexe que ça. Dans le PLT-scheme, les variables définies au top-level sont à portée dynamique, car le pointeur d'environnement est remis sur le top-level et qu'un define est en fait un set!. Enfin, à moins que le R6RS est changé ça. Mais je ne crois pas.

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par LLB Voir le message
    Fonctions d'ordre supérieur : présent dans tous les langages fonctionnels
    Tu pourrais même ajouter que sans ça, il est difficile de parler de langage fonctionnel.

    Citation Envoyé par LLB Voir le message
    Lazy evaluation : ce n'est par défaut dans aucun des 3 langages. OCaml possède des outils pour l'avoir de façon explicite (j'imagine que dans Scheme/Lisp on trouve la même chose).
    Pattern matching : OCaml, oui. Lisp/Scheme, non, pas directement (des extensions comme Qi peuvent l'ajouter).
    Je confirme pour l'évaluation paresseuse (couple delay/force) et je précise qu'il y a du pattern matching sans utiliser Qi dans Scheme. Il suffit de savoir où le trouver.

    http://docs.plt-scheme.org/reference/match.html

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par hibate_allah Voir le message
    mais j'ai trouvé cette notion dans lisp, puisque j'ai fait une étude sur les 3 langages
    Et d'ailleurs on voit bien qu'on t'aide pour ton travail. Ton étude semble relativement superficiel pour ne pas avoir de réponse aux questions que tu nous poses. Tu aurais pu aussi annoncer que c'est un travail quand même C'est plus honnête.

  12. #12
    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
    Citation Envoyé par Garulfo Voir le message
    il y a du pattern matching sans utiliser Qi dans Scheme. Il suffit de savoir où le trouver.
    http://docs.plt-scheme.org/reference/match.html
    Je connaissais la possibilité de faire du pattern-matching (ainsi que tout le reste) avec les capacités de metaprog, et j'ai déjà vu des gens coder leur propre extension maison pour ça pour s'amuser, mais je dois dire que je suis assez impressionné. C'est un matching puissant, qui a l'air bien intégré au langage (ils ont pensé au match-lambda et match-let qui sont d'un intérêt pratique non négligeable) qui couvre un bon nombre de choses (plus que les matching natifs ML/Haskell) et qui est extensible.

    Ceci dit, on ne peut pas tout avoir, il faut s'attendre à ce que dans le cas courant (à savoir du pattern-matching sur l'équivalent de types algébriques) ce soit sensiblement plus lent qu'un matching "hardcodé" dans un langage typé, qui n'utilise pas de généricité, et utilise les informations de typage ainsi que de bonnes techniques de compilation pour offrir de très bonnes performances. Une partie de cela peut être retrouvée par un très bon compilateur pour les patterns, mais il faut quand même s'attendre à ce que ce soit plutôt difficile (par exemple j'ai des doutes sur la présence de tests d'exhaustivité). C'est, comme toujours, la question du compromis entre puissance, simplicité et efficacité; je suis surpris par la bonne intégration des patterns dans PLTscheme, mais pour du code symbolique avec des besoins en perfs j'utiliserais encore un langage typé.

  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 Garulfo Voir le message
    je précise qu'il y a du pattern matching sans utiliser Qi dans Scheme. Il suffit de savoir où le trouver.
    Je ne connaissais pas, merci beaucoup !

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    je précise qu'il y a du pattern matching sans utiliser Qi dans Scheme. Il suffit de savoir où le trouver.

    http://docs.plt-scheme.org/reference/match.html
    Mais ça match pas sur le type comme en Caml ?

  15. #15
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par avavrin Voir le message
    Mais ça match pas sur le type comme en Caml ?
    Ça n'aurait pas de sens puisqu'il n'y a pas de type en Scheme -_-
    Cependant je te ferais remarquer que tu ne fais pas de matching sur le type non plus en ocaml. En fait, tu utilises les constructeurs. Dans ce sens, ça existe aussi dans Scheme, si tu en utilises.

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. Requete de comparaison entre 2 champs
    Par wallaz dans le forum Access
    Réponses: 2
    Dernier message: 23/09/2005, 19h17
  3. Comparaison entre les classes et les fonctions
    Par Ashgenesis dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 08/09/2005, 19h09
  4. comparaison entre 2 tables
    Par halina dans le forum Requêtes
    Réponses: 10
    Dernier message: 13/05/2005, 15h18
  5. Réponses: 6
    Dernier message: 21/01/2004, 13h25

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