Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1405 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [ocaml] Référence à un object Null ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ocaml] Référence à un object Null ?

n°869513
brisssou
8-/
Posté le 10-10-2004 à 17:10:06  profilanswer
 

Je ne trouve pas dans les différentes doc comment vérifier qu'un object est réellement instancié. Je voudrais faire un truc du genre :

Code :
  1. class noeud =
  2. object (this)
  3.         val mutable c = ""
  4.         val mutable fini = false
  5.         val mutable fils = Null
  6.         val mutable frere = Null
  7. (*Methodes d'access et de modification des attributs de la classe*)
  8. method getC = c
  9. method setC(str) = c <- str
  10. method setFrere(f) = frere<-f
  11. method setFils(f) = fils<-f
  12. method getFrere = if (frere#isNull) then new noeud else frere
  13. method getFils = if (fils#isNull) then new noeud else fils
  14. method isNull = (c = "" )
  15. method isFini = fini
  16. method setFini(b) = fini<-b


 
mais pas moyen, du coup, j'ai cru gruger en faisant

Code :
  1. class noeud =
  2. object (this)
  3.         val mutable c = ""
  4.         val mutable fini = false
  5.         val mutable fils = new noeud
  6.         val mutable frere = new noeud
  7. (*Methodes d'access et de modification des attributs de la classe*)
  8. method getC = c
  9. method setC(str) = c <- str
  10. method setFrere(f) = frere<-f
  11. method setFils(f) = fils<-f
  12. method getFrere = if (frere#isNull) then new noeud else frere
  13. method getFils = if (fils#isNull) then new noeud else fils
  14. method isNull = (c = "" )
  15. method isFini = fini
  16. method setFini(b) = fini<-b


 
mais évidemment, ça crash dés que je crée une instance de noeud, puisque ça crée des noeud en boucle...
 
donc, comment déclarer mes variqbles à null ?
 
merci !


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
mood
Publicité
Posté le 10-10-2004 à 17:10:06  profilanswer
 

n°869549
nraynaud
lol
Posté le 10-10-2004 à 18:30:35  profilanswer
 

héhéhé, y'a pas de null en o'caml, il faut le créer toi-même :
 
type maybenode = None | Some noeud;;


---------------
trainoo.com, c'est fini
n°869804
brisssou
8-/
Posté le 11-10-2004 à 08:57:25  profilanswer
 

merci pour ta réponse !
 
pardon de faire le lourd, mais il y a un problème de syntaxe
Si je mets le code que tu m'as donné, syntaxe error
j'ai essayé type maybenode = None | Some of noeud ;; mais noeud n'est pas encore déclaré
avec  
type maybenode = None | Some;; le problème viens avec  
val mutable fils = Null
et
frere#isNull
==> j'ai un truc genre
This expression has type maybenode
It has no method isNull
 
 
merci pour tes éclairsissements (ortho ?!) :jap:


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°871394
nraynaud
lol
Posté le 12-10-2004 à 14:17:56  profilanswer
 

hum, comme je travaille pas avec des objets, je te file un truc générique :
 
type 't maybe = None | Some of 't
 
ensuite, il faut adapter à ton type somme :
method getFrere = match frere with
  | None -> ...
  | Some f -> ...


---------------
trainoo.com, c'est fini
n°871400
nraynaud
lol
Posté le 12-10-2004 à 14:20:01  profilanswer
 

sinon, pour les types mutuellement récusifs, on utilise and :
 
type maybeMoncul = None | Some of moncul
and type moncul = ...
 
 
enfin, il me semble. la doc du langage est très bien faite, tu peux la consulter si tu as un doute.


---------------
trainoo.com, c'est fini
n°871737
brisssou
8-/
Posté le 12-10-2004 à 18:02:44  profilanswer
 

j'ai envie de dire...
 
 
 
 
 
merci beaucoup de ton aide !!!


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°873554
brisssou
8-/
Posté le 14-10-2004 à 20:02:26  profilanswer
 

Je sais, j'abuse, mais je n'y arrive toujours pas... :

Code :
  1. type 't maybenode = None | Some of 't
  2. class noeud =
  3. object
  4.         val mutable c = ""
  5.         val mutable fini = false
  6.         val mutable fils : noeud maybenode = None
  7. val mutable frere : noeud maybenode = None
  8. (*Methodes d'access et de modification des attributs de la classe*)
  9. method getC = c
  10. method setC(str) = c <- str
  11. method setFrere(f) = frere<-f
  12. method setFils(f) = fils<-f
  13. (*
  14. method getFrere = if (frere#isNull) then new noeud else frere
  15. method getFils = if (fils#isNull) then new noeud else fils
  16. *)
  17. method getFrere = match frere with
  18.  None -> new noeud
  19.  |Some noeud -> frere
  20. method getFils = match fils with
  21.  None -> new noeud
  22.  |Some noeud -> fils
  23. method isNull = (c = "" )
  24. method isFini = fini
  25. method setFini(b) = fini<-b
  26. (*Methode de recherche de mot dans l'arbre*)
  27. method exists(str) =
  28.  let lettre = String.sub str 0 0 in
  29.  let len = String.length str  in
  30.  let finMot = len<=1 in
  31.  let fin =
  32.   if (finMot) then
  33.    ""
  34.   else
  35.    String.sub str 1 len in
  36.  if (lettre = c) then
  37.   if (finMot) then
  38.    fini
  39.   else
  40.    if (fils#isNull) then
  41.     false
  42.    else
  43.     fils#exists(fin)
  44.  else
  45.   if (frere#isNull) then
  46.    false
  47.   else
  48.    frere#exists(str)
  49. (*Methode d'ajout dans l'arbre*)
  50. method add(str) =
  51.  let estFin = fini in
  52.  if (String.length str > 0) then
  53.  begin
  54.   let lettre = String.sub str 0 0 in
  55.   let fin = String.sub str 1 (String.length str - 1) in
  56.   fini <- String.length str = 0;
  57.   if (this#isNull) then
  58.   begin
  59.    c<-lettre;
  60.    if (not fini) then
  61.     fils#add(fin)
  62.   end
  63.   else if ( c = lettre && not fini) then
  64.    fils#add(fin)
  65.   else
  66.   begin
  67.    if (not fini) then
  68.     frere#add(str)
  69.   end;
  70.  end;
  71.  fini <- fini || estFin
  72. end;;


 
à la compilation, je recoit : This expression has type noeud maybenode
It has no method isNull
 
J'arrive pas à voir comment lui expliker que noeud maybenode, ben c'est un noeud...
 
j'ai beau lire des docs, je ne voit toujours pas comment faire ça...
 
je viends de java, et null me manque beaucoup :'(


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°873603
nraynaud
lol
Posté le 14-10-2004 à 20:36:25  profilanswer
 

il faut que partout où tu utilises un 't maybenode, tu fasses un match machin, c'est ce qu'on appelle un destructeur.
 
donc partout où tu utilises frere ou fils. c'est ce que fait java à chaque fois qu'il y a machin.bidule, il vérifie que machin n'est pas null.


---------------
trainoo.com, c'est fini
n°873826
el muchach​o
Comfortably Numb
Posté le 15-10-2004 à 07:39:02  profilanswer
 

brisssou a écrit :

Je sais, j'abuse, mais je n'y arrive toujours pas... :
 


 
Tu peux p-ê t'inspirer du code pour un arbre binaire :
cs.wellesley.edu/~cs251/ocaml-data.pdf
 
ou de celui-ci : http://www.lri.fr/~filliatr/ftp/oc [...] et.ml.html


Message édité par el muchacho le 15-10-2004 à 07:49:30

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [ocaml] Référence à un object Null ?

 

Sujets relatifs
Tomcat 5 : GenericServlet.getConfig() retourne null?!?Programmer en object permet-il de gagner en vitesse d'execution ?
[C#] Garder une référence vers une variable d'une autre classe ?Question tout bête de passage par référence
[Résolu] Un mysql_fetch_object avec un champ texteRéférence
conversion d'object de tableaux en intBusiness Object comment insérer des filtres dynamiques en VB
[Tomcat] : Incompatible object argument for function callPassages d'arguments par référence
Plus de sujets relatifs à : [ocaml] Référence à un object Null ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR