+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : mars 2011
    Messages : 8
    Points : 0
    Points
    0

    Par défaut [Erlang] Différence entre les balises à "tilde" (avec ~devant) et les classiques (/)

    Bonjour,

    Membre depuis quelques mois déjà mais bien peu de participation à ce site qui m'a pourtant fournis d'ores et déjà une aide inestimable dans mon activité.

    Depuis quelques temps, j’apprends en autodidacte complet le langage Erlang ; l’acquisition du très complet, et ô combien utile, livre de Joe Amstrong "Programming Erlang" m'a permis une avancée beaucoup plus rapide que tous les tutoriels que j'ai pu trouver, qu'ils soient sortis des document fournis en faculté ou sur Internet.

    Mais aujourd'hui, je bute sur un point de détail et mes recherches s'avèrent infructueuses (il est possible que la réponse soit dans le livre ou dans la doc officielle mais n'étant pas naturellement anglais, l'info a pu m'échapper).

    Un point qui ne doit pas être très compliqué pourtant :

    Lors de l'utilisation des fonction input/output (io:format notamment), j'ai remarqué différentes balises symboliques tel que ~p, ~n... mais également des balises classiques à d'autres langages comme /p, /n, etc...

    Je ne pense pas me tromper en affirmant que le "p" permet de lier à la fonction un élément externe (atom, variables, tuples, etc...)
    Le "n" est classiquement lié au retour chariot.

    Ma question est donc la suivante; quelle différence faire entre les balises "tilde" (avec ~devant) et les classiques (/)?

    Y a-t-il une ou des règles particulières de leurs utilisations ?

    Et accessoirement existe-t-il un document comme c'est le cas dans d'autres langages (C, C++) qui regrouperait toutes les particularités et toutes les balises utilisables (en français ou en anglais) ?

    Merci d'avance de vos réponses/recherches.

    Borozia

  2. #2
    Membre actif
    Inscrit en
    décembre 2004
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 119
    Points : 154
    Points
    154

    Par défaut

    Bon, probablement trop tard, mais au cas où. :-)

    Je ne me souviens pas du cas éventuel des backslash, mais pour le formatage utilisant le '~', le man de la fonction io:format décrit l'ensemble des commutateurs que tu cherches:

  3. #3
    Invité de passage
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : mars 2011
    Messages : 8
    Points : 0
    Points
    0

    Par défaut

    Il n'est jamais trop tard pour répondre à une question (L'info peut également servir à d'autres)

    Merci de ta réponse jc-miranda, je vais aller voir si je trouve mon bonheur dans le man.

    Si il y a d'autres réponses pour plus d'info ou concernant les autres questions, je surveille le sujet

  4. #4
    Membre du Club
    Homme Profil pro
    Dév SIG-web
    Inscrit en
    août 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dév SIG-web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2010
    Messages : 28
    Points : 62
    Points
    62

    Par défaut

    Le plus simple est de faire des tests avec io_lib:format/2

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    8> A = {ok, 1,2,[45,"qzqzd"]}.
    {ok,1,2,[45,"qzqzd"]}
    12> io_lib:format("~p\n", [A]).
    [[123,
      ["ok",44,"1",44,"2",44,[91,["45",44,"\"qzqzd\""],93]],
      125],
     10]
    13> io_lib:format("~p~n", [A]).
    [[123,
      ["ok",44,"1",44,"2",44,[91,["45",44,"\"qzqzd\""],93]],
      125],
     "\n"]
    15> io_lib:format("\p~n", []). 
    [112,"\n"]
    16> io_lib:format("\p~n", [A]).
    ** exception error: bad argument
         in function  io_lib:format/2
            called as io_lib:format("p~n",[{ok,1,2,[45,"qzqzd"]}])
    La syntaxe tilde et antislash n'est pas équivalente. Les deux peuvent faire un retour chariot avec 'n' (avec une différence*), mais par exemple le 'p' n'existe qu'avec le tilde.

    Tout simplement parce que le "\p" ça n'existe pas, alors que le "\n" est une notation d'usage pour le retour chariot.

    Donc par défaut, je trouve qu'il est plus simple d'utiliser systématiquement le tilde. De plus, je suppose que des optimisations sont faites si on favorise le tilde mais je n'en sais rien.


    *Pour le 'n', on voit que "\n" devient 10 alors que "~n" devient [10] .

  5. #5
    Invité de passage
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : mars 2011
    Messages : 8
    Points : 0
    Points
    0

    Par défaut

    J'arrive longtemps après ton post, mais merci du renseignement Ludochm.

    Entre temps je suis passé différemment dans mon code, et ai rendu mon projet.
    Mais l'astuce servira sans doute à d'autre ou plus tard (je la garde sous le coude en cas de besoin).

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •