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

Caml Discussion :

[Caml] Du mal à comprendre comment cela fonctionne...


Sujet :

Caml

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Points : 4
    Points
    4
    Par défaut [Caml] Du mal à comprendre comment cela fonctionne...
    Bonjour !

    Je vais sous peu être ammené à manipuler CamL Light, j'essaye pour le moment de comprendre un peu comment cela fonctionne mais je rencontre des difficultés, je n'y comprend pas grand chose.

    J'ai surtout par le passé manipulé des langages comme Pascal ou C++ (tres vite fait pour ce dernier), mais avec Caml , je me rend compte que cela n'a rien à voir.

    Bref, je n'arrive pas à faire de simples programmes (et les tutoriaux sont bien souvent complexes).
    Par exemple je voudrais, en utilisant une boucle (il me semble bien que cela existe en CamL light) afficher 3 fois "Hello World"

    J'ai essayé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       for k = 1 to 3 do
          begin
             print_string " Hello world";
             print_newline();
          end
    done;
    qui malheureusement provoque une erreur, de syntaxe apparement.


    Je suis en outre curieux de comprendre quelle est la philosophie de CamL, j'ai lu sur le forum que dans CamL " tous est fonction" : je ne comprend pas trop ce que cela signifie concretement.

    De plus j'ai lu dans un de mes cours qu'on "ne dit pas à CamL comment faire, mais plutot ce qu'il faut faire" et qu'il se charge du reste en implantant les fonctions comme il le souhaite ... là encore, je ne comprend pas.

    Votre aide serait la bienvenue.
    Merci

    Caedes.

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Ah, il semblerait que j'y soit parvenu avec la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i=1 to 3 do
       print_string "Hello world";
       print_newline();
    done;;
    A ce moment là, comment sait on lorsqu'il faut mettre ";" ou ";;" ?

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Je pesne que le mieux est de comencer par un cours sur ce langage, en ayant bien à l'esprit que ce n'est pas une nouvelle syntaxe que tu apprends, mais bien un nouveau langage, dont la manière de penser est résolument différente de celle des langages que tu connais.

    De mémoire, ce cours est pas mal.

    Sans oublier bien sur la page officielle de caml : http://caml.inria.fr/

  4. #4
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    il faut que tu comprennes que la "logique" de caml n'est pas du tout la meme que Pascal. En fait, ces deux langages ne font pas partie du tout de la meme famile. Pascal fait parti des langages imperatif, c'est a dire que l'on peux resumer ca a une suite d'instruction. Alors que Caml est un langage dit fonctionnelle, c'est a dire qu'il faut plutot voir ca comme une fonction qui va etre evaluer durant l'execution...

    Bref, il ne faut pas du tout essayer de faire de l'imperatif en Caml. Il faut essqyer d'oublier les habitudes que tu as pu avoir avec la programmtion imperative. Oublies ls boucles for, while... pense fonctions recursives, if then else, etc...

    Le "Hello World" classique n'est pas vraiment le bon endroit par ou commencer car c'est une approche tres "imperative" et c'est pas tres dans l'espris de caml.

    Si tu veux comprendre le fonctionnement de caml, tu peux essqyer de definir la fonction factorielle par exemple. Dans ce cas caml est particulierement puissant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let rec factorielle = function
    0 - > 1
    n -> n * factorielle (n-1)
    ou alors regarder comment on manipule des listes en retournant une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let rec inverse = function
    [] -> []
    h::q ->(inverse q)@h
    Pour conclure, si tu veux bien comprendre l'espris d'un langage fonctionnelle comme caml, oublie ce que tu as appris et reprends au commencement en reprennant les bases : la structure du if then else, le pattern matching ( qui au passage est beaucoup plus puissant que le switch des langages imperatif ), le declaration de type, etc...

    Si tu as des problemes, n'hesite pas a poster de nouveau.

    Bon courage

  5. #5
    Membre averti
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Points : 336
    Points
    336
    Par défaut
    tiens regarde ici : http://floresiea.free.fr/3eme_annee/...5projets/Caml/
    Ceci est mon projet de Caml que j'avais pendant mes etudes.

    Le sujet c la conception du Morpion

    Ct fait en Caml Light, j'ai pris du temps à tout commenter, peux etre que ca pourrait t'aider.

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Merci à tous
    Je vais regarder vos liens, j'espere que ça me permettra d'y voir un peu plus clair.

    C'est assez frustrant de savoir que tout ce que je sais de la programmation (impérative) ne me sera pas utile pour la suite

  7. #7
    Membre averti
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Points : 336
    Points
    336
    Par défaut
    Pour etre franc moi j'ai vraiment détesté Caml, c'est vraiment pas mon type de logique. Il est réputé bon pour les maths sup ou spé qui apprennent de manière fonctionnelle la programmation.

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Etant en Math Sup, il faut que je me familiarise avec (les cours commencent en Janvier), c'est assez enervant quand on pense que certaines prepas utilisent encore Pascal (à mon avis plus utile, je ne comprend pas (encore) comment on peut dire que Caml est adapté à l'apprentissage de la programmation, puisque dépourvu de boucles ,... Bon dans la pratique elles existent, mais je pense qu'elles ne seront pas privillégiées)

  9. #9
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Pourquoi Caml est adapter a l'apprentissage de la programmation ? Je dirais que Caml etant un langage fortement type avec un systeme d'inference de type tres performant, il permet a l'utilisateur d'apprendre la rigueur que necessite la programmation. De plus il est tres puissant. Et commencer par un tel langage pour apprendre la programmation me semble pertinant car n'enferme pas dans un vision "fermé" de la programmation. J'utilise le terme "fermé" car la plus par de gens connaissent uniquement la programmation imperative, voir oriente objet ( mais toujours sur un oeil imperatif ) et sous totalement depourvu lorsqu'il tombe ne a ne avec un langage tel Caml ou encore Prolog...

    Bref, j'ai personnellement commence la programmation par Caml puis Pascal et je n'ai eu aucun mal dans ce sens la... l'autre sens semble beaucoup plus dure d'apres ce que j'ai pu voir.

    Pour conclure, je dirais que Caml est vraiment un langage tres puissant et en plus on peut pousser un petit cocorico car developpez dans des labos francais ( INRIA & co )

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Sir Caedes
    Je ne comprend pas (encore) comment on peut dire que Caml est adapté à l'apprentissage de la programmation, puisque dépourvu de boucles ,... Bon dans la pratique elles existent, mais je pense qu'elles ne seront pas privillégiées)
    Ben justement la programmation c'est autre chose que les boucles, les conditions d'arrêt et autres. C'est voir la prog par le petit bout de la lorgnette. Pense récursif, c'est beaucoup plus simple et élégant.
    benratti >> 100 % d'accord avec toi.

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Je n'ai pas le recul suffisant pour en parler en fait
    Néanmoins, c'est un avis personnel, je trouve moins de rigueur dans CamL que dans un langage comme Pascal.
    Ne serait ce que pour les types, en Caml, il n'y a pas à s'en soucier, le programme fait tout pour nous concernant le typage (je ne trouve pas que ce soit spécialement de bonnes habitudes).

  12. #12
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Pour ma part, j'aime beaucoup la philosophie que l'on trouve derrière Caml (langage qui m'a fait découvrir la programmation fonctionnelle), et je déplore qu'un tel langage ne soit pas plus répandu.

    En fait, c'est véritablement un cercle vicieux:
    - les gens ont l'habitude de voir un programme comme une suite d'instructions (il est alors aisé de comparer un programme à une recette de cuisine, un mode d'emploi, une fiche d'instructions... autant de choses que l'on rencontre dans notre vie de tous les jours)
    - DONC ils sont habitués à la programmation impérative
    - DONC ils éprouvent des difficultés face aux langages fonctionnel
    - DONC les langages impératifs (C, C++, Java, Pascal...) deviennent populaires
    - DONC les langages impératifs s'imposent dans les entreprises
    - DONC on les langages impératifs sont la première forme d'enseignement de la programmation
    - DONC les gens ont l'habitude de voir un programme comme une suite d'instructions...

    ***
    Cela se remarque tout de suite: en dernière année, mon binôme et moi étions les seuls à avoir choisi un sujet en Caml, sachant que mon binôme, issus du milieu professionnel, n'avait jamais fait de programmation fonctionnelle avant et était curieux de découvrir un nouveau langage (et une nouvelle manière de penser).

    En dernière année, j'ai donc fait du Caml (j'en avait fait un peu avant) et j'ai eu également un gros projet en Prolog. Je dois vous dire que non seulement la programmation fonctionnelle est très peu enseignée, mais quand elle est enseignée, elle est souvent mal enseignée, et il nous a fallu du temps pour nous habituer à Prolog.

    ***
    Quelques notions que j'adore en Caml:
    - quand on assigne une valeur à une variable, on ne peut plus changer sa valeur, ce qui facilite la preuve formelle d'un programme

    - quand on fait un "match ... with" et que l'on oublie des cas, le compilateur nous le signale, en nous précisant les cas qui ne sont pas reconnus

    - le principe même des "match ... with" est tout simplement grandiose !

    - on peut passer une fonction en paramètre d'une autre fonction, et ainsi définir une nouvelle fonction (ex: let absAll = List.map abs ;; )

    - (* les commentaires (* peuvent *) être (* imbriqués *) (* ce qui n'est (* pas *) le cas en C/C++/Java/...
    (c'est pourtant pratique pour le débugage !) *) *)

    - l'inférence de type, évoquée par benratti

    - avec des fonctions simples, on peut énoncer des problèmes compliqués (que l'on aurait beaucoup de mal à exprimer en C/C++/Java/... )

    - une fonction peut renvoyer plusieurs variables, sous forme de tuples

    Voilà en gros pourquoi j'aime bien le Caml.

    ***

    benratti et Trap D>> 100% d'accord avec vous !

    Sir Caedes>> en fait, en Caml, il faut voir le typage comme les templates du C++ (diantre! me voilà en train de faire un rapprochement entre programmation fonctionnelle et impérative!): le Caml permet d'écrire des fonctions générique, qui peuvent s'appliquer à différents types de données. Après, il est possible de spécifier exactement le type de données dans l'entête de la fonction (comme on le ferrais dans un fichier .h en C)

  13. #13
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Je n'ai pas le recul suffisant pour en parler en fait
    Néanmoins, c'est un avis personnel, je trouve moins de rigueur dans CamL que dans un langage comme Pascal.
    Ne serait ce que pour les types, en Caml, il n'y a pas à s'en soucier, le programme fait tout pour nous concernant le typage (je ne trouve pas que ce soit spécialement de bonnes habitudes).
    C'est justement la que tu te trompes ! Il faut bien au contraire bien reflechir a ce qui se passe en Caml, car pour ecrire un programme correct, il faut qu'il soit bien typé. Certes, tu ne vas pas donner explicitement le type d'une variable en faisant une déclaration, car le moteur d'inférence le calcule, mais il faut quand meme que quand tu l'utilise, tu le fasses dans un contexte valable.
    Dire qu'on n'a pas a se soucier des types en Caml, c'est une grave erreur...

  14. #14
    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
    En fait je dirais même plus : le système de type en CaML est à la fois plus puissant et plus rigoureux qu'en Pascal. Tout d'abord, si tu fais une erreur de type, le compilateur te le signale immédiatement, comme en Pascal sauf qu'en Pascal il la repère uniquement parce que tu lui as explicité de quel type était chaque variable, alors qu'en CaML il n'y a pas besoin, c'est donc tout simplement plus rapide à écrire tout en restant aussi sûr, sinon plus sûr (pas de conversion implicite en CaML, je ne suis plus tout à fait sûr pour Pascal).
    Mais le gros avantage de CaML c'est les types polymorphiques : tant qu'une fonction ne fait pas usage de fonctions ou d'opérateurs spécifiques à un type lors de la manipulation de ses données, le type de cet argument reste générique, ce qui permet d'écrire très facilement des structures de données générique et des fonctions de manipulation de ces données (pense aux templates et à la STL en C++ en plus facile et plus robuste).
    Par ailleurs comme dit plus haut, définir un nouveau type de structure de donnée et le manipuler est infiniment plus facile et élégant en CaML, je te donne un simple exemple : définition d'arbre binaire et insertion d'un élément dans un arbre binaire de recherche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    type 'a btree = Void | Node of 'a btree * 'a * 'a btree;;
     
    let rec insert tree x = match tree with
      | Void -> Node(Void, x, Void)
      | Node(fg, y, fd) when x < y -> Node( insert fg x, y, fd )
      | Node(fg, y, fd) when y < x -> Node( fg, y, insert fd x )
      | _ -> tree;;
    Ecris moi la même chose en Pascal, et tu comprendras pourquoi je pense que le CaML est préférable pour l'enseignement de l'algorithmique.

    --
    Jedaï

  15. #15
    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
    Pour rebondir sur le cercle vicieux dont parlait pcaboche, ce n'est pas tout à fait vrai : il parle du point de vue d'un professionnel au parcours classique, mais dans le monde universitaire et de la recherche, les tendances sont moins marqués, et dans certaines branches, on a même une lourde prédominance des langages fonctionnels (ici CaML, en Norvège Haskell, aux Etats-Unis Lisp et Scheme). Le fait que les Prépas passent au CaML est une excellente chose de ce point de vue : en effet le passage du fonctionnel à l'impératif est beaucoup plus facile que dans le sens inverse, et le modèle fonctionnel fournit des abstractions de raisonnement applicables et intéressantes en impératif.
    Le modèle fonctionnel bénéficie d'une théorisation rigoureuse et consistante du lambda-calcul et de la logique (cf Curry-Howard) qui en fait une base privilégiée pour la création de systèmes sécurisés et prouvés comme c'est la tendance dans certains secteurs critiques et de plus en plus en dehors de ces secteurs. On tend vers une minimisation du temps de déboguage, et vers des applications plus robustes.
    Bien sûr je suis influencé par le milieu dans lequel j'étudie (je suis étudiant en Informatique Fondamentale à l'ENS (Ecole Normale Supérieure) de Lyon), où les partisans (et les participants) de OCaML sont légion.

    --
    Jedaï

  16. #16
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Salut Jedai,

    J'ai eu une formation universitaire, mais pas orientée recherche. C'est vrai que les gens autour de moi ont tendance à dénigrer la programmation fonctionnelle (à tord!). Paradoxalement, ces mêmes personnes ont tous les mêmes mots à la bouche: "qualité", "sécurité", "robustesse", "Génie Logiciel"...

    Selon moi, un tel degré d'excellence ne peut être atteint que par un langage de type fonctionnel. En effet, un programme écrit en langage fonctionnel est beaucoup plus facile à prouver formellement que ceux écrits en langage impératif.

    Je suis assez partisan des langages fontionnels, et je pense que les langages du futur ne pourront être QUE fonctionnels (avec des systèmes de preuve formelle). Un problème qui subsiste cependant, c'est la quantité de mémoire dont les programmes écrits en langage fonctionnels ont besoin (la vitesse est un problème secondaire: on préfère privilégier la sureté aux performances brutes). Pour que les langages fonctionnels s'imposent dans les entreprises, il faut qu'ils disposent d'optimisateurs suffisamment puissants pour que les programmes puissent traiter de grandes quantités de données.

    Sinon, sur le fond, je suis d'accord avec toi. J'aime beaucoup Ocaml mais n'ai pas l'occasion de le pratiquer. Si seulement j'avais le niveau pour aller en Normale Sup'...

  17. #17
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Pas obliger d'aller a normal sup pour faire du caml... pas mal de facs l'enseignent et plutot bien. Il faut dire que sur Paris, on a la chance d'avoir comme prof des chercheurs qui s'y connaissent particulierement bien en Caml voir meme participe au developpement de Caml...

Discussions similaires

  1. client RMI comment cela fonctionne-t-il?
    Par manux53 dans le forum Langage
    Réponses: 10
    Dernier message: 21/04/2010, 15h39
  2. Comment cela fonctionne ?
    Par AuraHxC dans le forum Bibliographies - Index - Glossaires
    Réponses: 2
    Dernier message: 09/11/2009, 12h01
  3. ouinon comment cela fonctionne ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 5
    Dernier message: 19/02/2008, 11h16
  4. snprintf comment cela fonctionne?
    Par deck_bsd dans le forum C
    Réponses: 3
    Dernier message: 24/11/2006, 15h20
  5. [Berkley DB] Comment cela fonctionne ?
    Par saidus dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 22/02/2006, 17h49

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