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 :

Différences syntaxiques caml/Ocaml


Sujet :

Caml

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Différences syntaxiques caml/Ocaml
    Bonjour à tous,
    J'ai appris caml en prépa et je suis à présent contraint d'utilisé Ocaml. Je n'ai trouvé nulle part une liste exhaustive des différences syntaxiques entre les deux. Si quelqu'un pouvait me communiquer un site ou même me donner directement des éléments de réponse cela m'aiderait beaucoup.
    Merci d'avance.
    MaxH.

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    les seules différences concernent certaines fonctions placées dans des modules... Array.length au lieu de vect_length par exemple

    un lien indispensable :
    http://caml.inria.fr/pub/docs/manual-ocaml/index.html

  3. #3
    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
    Les différences syntaxiques que j'ai constatées (et que j'ai à l'esprit) sont les suivantes (par ordre d'importance/fréquence) :
    - les modules : la syntaxe pour les modules en caml light est quasi inexistante (et je la connais mal), pour les modules c'est beaucoup plus riche en OCaml
    - l'alias de type : en caml light, pour faire un alias de type on utilise == et pas = : type 'a stack == 'a list par exemple. En OCaml on utilise un seul =
    - le keyword "where" qui existe en Caml light : s'utilise comme en Haskell : "a + b where a = 1 and b = 2". Il a été supprimé (c'est dommage d'ailleurs) dans OCaml.
    - les caractères : `a` en Caml light, 'a' en OCaml
    - les ;; : obligatoires en Caml light, optionnels en OCaml
    - les constructeurs comme fonctions : en Caml light comme en SML, les constructeurs sont manipulables dans les expressions comme des fonctions : si l'on déclare un type "type foo = Bar of int", "Bar" désigne une fonction de type int -> foo.
    - les opérateurs préfixes : pour déclarer un opérateur préfixe comme +, -, * et compagnie, en caml light on utilise "prefix op" (let prefix ++ (a, b) (a', b') = a + a', b + b'; et en OCaml (op) : (let (++) (a, b) (a', b') = ..). "prefix ::" est utilisable (ça rejoint le point précédent)
    - fun et function : la plus grosse différence à mon avis :
    -- en OCaml, "fun" peut binder plusieurs variables mais ne fait qu'un seul filtrage (donc on ne l'utilise en général que pour des filtrages exhaustifs) : fun a b -> a + b... "function" ne peut binder qu'une seule variable mais on peut faire un filtrage à plusieurs cas dessus : function [] -> ... | hd::tl -> ...
    -- en Caml lgiht, "fun" peut binder plusieurs patterns, et peut faire un filtrage. function fait un filtrage simple.
    On peut donc écrire :
    let rec nth = fun
    | (hd::_) 0 -> hd
    | (_::tl) n -> nth tl (n - 1)
    | _ _ -> invalid_arg "nth"
    ;;
    Cependant, la lisibilité n'est pas forcément terrible.


    Ce sont les différence purement syntaxiques que je connais. Après il y a les fonctions qui changent (par exemple les opérateurs booléens : & / && et or / ||), et surtout les nombreux ajouts de OCaml : modules plus riches, objets, variantes polymorphiques, flots...
    De plus en OCaml on a camlp4, un outil qui permet de modifier la syntaxe, donc il y a une plus grande flexibilité sur la syntaxe. En particulier, une partie des points que j'ai énoncé ne sont plus tout à fait vrai si on utilise la syntaxe révisée (ou "syntaxe alternative").

  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 991
    Points
    2 991
    Par défaut
    Merci bluestorm, tu as été exhaustif et c'est ce qui était demandé.

    Il reste un dernier cas, le match de OCaml se comporte désormais comme function, il ne peut plus binder qu'une seule variable, il faudra donc écrire:

    match (a,b) with ...

    au lieu de:

    match a b with ...

  5. #5
    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
    J'ajoute aussi une chose : le type 'a vect de Caml Light n'existe plus et s'appelle 'a array en OCaml !

    Citation Envoyé par gorgonite
    Je dirais même plus : vital ! L'expérience montre qu'une très grande partie des problèmes peut être résolue grâce à ce lien.

    J'aimerais bien un smiley cliquable avec un panneau du genre : "Read The Fucking Manual !"... c'est possible ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/11/2012, 21h53
  2. [ocaml] lib C/caml
    Par germi dans le forum Caml
    Réponses: 3
    Dernier message: 07/01/2010, 23h10
  3. [Bash] différence syntaxiques
    Par saw-next dans le forum Linux
    Réponses: 4
    Dernier message: 07/05/2009, 15h11
  4. Analyseur lexical et syntaxique pour Caml
    Par ali-dev85 dans le forum Caml
    Réponses: 3
    Dernier message: 31/01/2009, 14h39
  5. Réponses: 8
    Dernier message: 16/04/2007, 17h10

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