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 :

Petites questions diverses (débutant)


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 Petites questions diverses (débutant)
    Bonjour,

    je débute en caml light et j'ai quelques petites questions. Afin de ne pas inonder le forum, je les regroupe ici :

    1. Pourquoi le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let L = ref [] in
    let a=[| 0 |] in
    for i=0 to 3 do
    	a.(0)<- i ; L:= a :: (!L) 
    done; !L;;
    renvoie-t-il [[|3|]; [|3|]; [|3|]; [|3|]] ? (je voudrais avoir [[|0|]; [|1|]; [|2|]; [|3|]])

    2. Une fois des opérateurs créés (addition, soustraction, multiplication, division), puis-je leur donner un ordre de priorité, de manière définitive ? (sans avoir à utiliser des parenthèses à chaque fois).

    3. Pourquoi je reçois le message "Warning: the variable A starts with an upper case letter in this pattern.", quand j'écris "let f A=A" ?
    Quel est le mal que ça commence avec une majuscule ? On a bien a<>A, non? Comment se débarrasser du warning ?

    4. Puis-je utiliser << #open "num" >> à l'intérieur d'une fonction ? (je voudrais une fonction qui l'ouvre automatiquement).

    5. Peut-on me donner quelques informations sur les modules en général, et plus particulièrement sur "num" ? (je n'ai jamais utilisé cet outil de caml light). Notamment, qu'est-ce que Big_int et Ratio, et que signifie le double trait en bas dans "- : big_int__big_int = <abstr>" ?

    6. Est-il possible de créer une fonction qui crée une variable globale ? (je voudrais créer une fonction f qui prend en argument a, et telle que, une fois (f a) appelée, j'aie b=a.

    Merci d'avance pour vos réponses.

  2. #2
    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
    1. Parce que tu mets dans ta liste le tableau a, et pas une copie du tableau a. Quand tu modifies son contenu, tous les éléments de la liste (qui sont ce même tableau) sont modifiés.
    C'est comme avec les références :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # let a = ref 1 in let tab = [|a; a; a|] in tab.(0) := 2; tab;;
    - : int ref vect = [|ref 2; ref 2; ref 2|]
    La question est traitée dans la partie 1.4 de ce TD caml.

    2. Non, la priorité est fixée au départ. Ce n'est pas précisé dans le manuel, mais à priori cela dépend des premiers symboles de l'opérateur : il a la même priorité que celle du symbole Caml Light qui est son préfixe. Par exemple "prefix +++" aura la même priorité que "+", donc plus forte que "prefix ===". Tu trouveras une liste des priorités des opérateurs dans le premier tableau de cette page

    3. En Objective Caml, les noms de variable ne peuvent pas commencer par des majuscules. C'est une distinction appréciable qu'il est intéressant de respecter, d'où le warning.

    4. Non.

    5. Va lire la doc. Pour le double underscore, c'est le séparateur entre le module et son membre (par exemple on a Random.int en Objective Caml, et random__int en Caml Light).

    6. Non. Par contre tu peux avoir une référence globale qui est modifiée par ta fonction (let b = ref None;; let f a = b := Some a;. Mais c'est très moche et sans doute une mauvaise idée, tu devrais plutôt essayer de coder plus proprement (on ne peut pas te dire comment sans avoir plus de détails sur ton affaire).


    Pourquoi utiliser du Caml Light et pas de l'Objective Caml ? OCaml a surtout des avantages, en particulier pour les modules, et est utilisé par plus de monde donc plus simple à installer/utiliser (en plus d'être plus performant et d'avoir plus de bibliothèques disponibles). Même si tu es dans un cadre scolaire et que ton enseignant utilise Caml Light, je pense que OCaml est préférable pour tes projets persos.

  3. #3
    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
    Merci.

    1bis. J'aimerais à présent, étant donné une matrice (tableau de tableaux), faire un affichage graphique de la table avec des cases contenant les éléments de la matrice. Quelqu'un peut-il me donner un tel code ? (je n'ai absolument aucune connaissance en les capacités graphiques de caml light).


    Merci d'avance.

  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
    1bis. doc du module graphics (regarde en particulier open_graph, moveto, lineto et draw_string).

    2. Je n'en suis pas sûr, ce n'est pas précisé dans le manuel.

    5. <abstr> signifie que la représentation du type est abstraite : tu as accès aux fonctions pour les manipuler, mais pas leur représentation interne. Big_int sont des entiers de taille arbitraire, et Ratio des rationnels (de taille arbitraire aussi). Si tu veux juste faire des calculs sur des grands nombre, ne te prends pas la tête et utilise seulement des fonctions sur les "num" (qui sont un type qui regroupe tout cela) : +/ , -/ , */ , =/, num_of_int, int_of_num, etc.

    6. Non. Si tu stockes ces opérations dans un enregistrement, tu peux y mettre m, n et P aussi. En Objective Caml tu aurais les foncteurs qui permettent de faire ça de manière plus solide.

    7. Si tu as une fonction (repr_of_int : int -> repr) où "repr" est ton type d'entiers, qui fait ta conversion, tu peux utiliser (init_vect : (int -> 'a) -> 'a -> 'a vect) de la bibliothèque standard : (init_vect 10000 repr_of_int) te donne ton tableau.

  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
    Petite remarque au passage. Il est très probable que Caml Light disparaisse du panorama. De plus en plus d'établissements du supérieur, surtout des écoles d'ingénieurs, commencent à le foutre à la poubelle. On espère donc que le mouvement arrivera progressivement en prépa.

Discussions similaires

  1. SessionBehavior Petite question de débutant
    Par ZOlivier dans le forum W4 Express
    Réponses: 2
    Dernier message: 28/08/2007, 13h47
  2. Petite question de débutant
    Par will2taz dans le forum VB.NET
    Réponses: 10
    Dernier message: 10/07/2007, 20h49
  3. Petite question de débutant
    Par Arry_C dans le forum Access
    Réponses: 2
    Dernier message: 03/03/2007, 21h02
  4. Petites questions de débutant
    Par mickael.be dans le forum Débuter
    Réponses: 15
    Dernier message: 28/12/2005, 17h06
  5. Petites questions diverses
    Par Fouflarage dans le forum Débuter
    Réponses: 7
    Dernier message: 29/11/2005, 13h43

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