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 light] opérateurs infixe


Sujet :

Caml

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Points : 25
    Points
    25
    Par défaut [Caml light] opérateurs infixe
    Bonjour,

    j'aimerais savoir s'il est possible, avec caml light, d'utiliser des symboles ou combinaisons de symboles (non déjà utilisés, bien sûr), comme nom de certaines fonctions.
    Par exemple, je voudrais créer une fonction ++ qui additionne 2 tableaux p1 et p2, qui puisse être appelée avec p1 ++ p2.
    Une fois créée, pour la notation infixe, je crois qu'il suffit d'écrire Au passage, je ne comprends pas l'importance du #.

    Merci.

  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
    je ne me souviens plus trop de caml light


    est-ce que ceci marche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    let (++) p1 p2 = ...

  3. #3
    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
    comme cela alors ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let ++ p1 p2 = ... ;;
    #infix "++" ;;
    let p1 = ... in let p2 = ... in p1 ++ p2 ;;

  4. #4
    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
    ben au lieu de ++ essaies addVector

  5. #5
    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
    Citation Envoyé par elishac Voir le message
    Ma question était de savoir s'il était possible d'utiliser des symboles (autres que lettres et chiffres) dans le nom d'une fonction. "AddVector" ne contient que des lettres.
    ben semblerait que non... sinon tu n'aurais pas eu d'erreur avec mon exemple


    doc officielle : http://caml.inria.fr/pub/docs/manual...t/node4.9.html

    Citation Envoyé par Xavier Leroy
    Presently, no. Operators are restricted to be identifiers. Allowing more operators (e.g. ++ or */ ) would be nice, but requires some changes in the lexical conventions of Caml Light. For instance: 1+-2 without blanks is currently parsed as 1 + (-2), but would probably have to be parsed as prefix +- 1 2 with this extension.


    j'ai fait l'effort d'installer cette bouse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #let add p1 p2 = p1 + p2 ;;
    add : int -> int -> int = <fun>
    ##infix "add" ;;
    #1 add 2 ;;
    - : int = 3

  6. #6
    Membre régulier Avatar de B.Moncef
    Étudiant
    Inscrit en
    Août 2007
    Messages
    75
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 75
    Points : 88
    Points
    88
    Par défaut
    Salut,
    il me semble que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let prefix ++ p1 p2 = p1 + p2 ;;
    devrait faire l'affaire.

    PS : je n'ai pas testé, et je n'ai jamais utilisé caml-light.
    EDIT : Confirmation : http://www.developpez.net/forums/d41...l/#post2500718

  7. #7
    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
    testé, en effet ça marche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #let prefix ++ (a,b) (c,d) = (a+c, b+d) ;;
    ++ : int * int -> int * int -> int * int = <fun>
    #let c = (1,2) ++ (3,4) ;;
    c : int * int = 4, 6
     
    #let prefix @@ a b = a + b ;;
    @@ : int -> int -> int = <fun>
    #let d = 1 @@ 4 ;;
    d : int = 5

    et concernant le contre-exemple de XL,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #let prefix +- a b = a + b ;;
    +- : int -> int -> int = <fun>
    #let n = 1 +- 2 ;;
    n : int = 3
    #let n = 1 + - 2 ;;
    n : int = -1

    il devait parler d'une version antédiluvienne (ie bien avant 2002, date de la dernière caml light)

  8. #8
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Citation Envoyé par elishac
    Sinon, pourquoi faut-il un # devant infix ?
    Comme #load, #use et d'autres encore, #infix ne fait pas partie du langage caml (light ou pas). C'est une commande de l'interpréteur, qui par convention commence par #.

    Cordialement,
    Cacophrène

Discussions similaires

  1. programmation en caml light
    Par sicav dans le forum Caml
    Réponses: 36
    Dernier message: 20/04/2007, 22h27
  2. [Caml Light] Nombre de bits
    Par Nilss dans le forum Caml
    Réponses: 4
    Dernier message: 23/03/2007, 20h32
  3. [Caml Light] Librairie 'graphics" et Linux
    Par paf le chiot dans le forum Caml
    Réponses: 11
    Dernier message: 16/03/2007, 18h16
  4. Typage Caml light (je suis totalement perdu!)
    Par ficarre dans le forum Caml
    Réponses: 11
    Dernier message: 24/02/2007, 14h42
  5. Réponses: 3
    Dernier message: 07/12/2006, 10h15

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