Hippopotame (./508) :Yoshi Diabolique (./507) :
Un pointeur sur un Yoshi, c'est un Yoshi* en C et Yoshi* correspond grosso modo à un "Yoshi option" en CAML ^^
Pff, non, ni grosso ni modo.Vu que 'a option est un type somme, en mémoire c'est probablement un machin encapsulé. D'autre part c'est pas mutable. Donc vraiment rien à voir avec un pointeur.
Null n'est pas un pointeur valide : tu ne peux pas faire d'arithmétique dessus, tu ne peux pas le déréférencer, bref tu ne peux rien en faire à part le stocker ou le comparer à un autre pointeur (exactement comme None, donc)
Rien à voir avec None !
Il n'y a pas d'"arithmétique" (c'est à dire d'opérations toutes faites) sur le type 'a option de toute façon.
Essaie de faire (Some 3) + (Some 5) => erreur de type.Mais rien ne t'empêche d'en programmater si ça te chante.
ah oui, null c'est le pointeur nul, mais je peux pas te laisser raconter des bêtises à propos des "valeurs binaires"
Ah ben corrige wikipedia.

)

Yoshi Diabolique (./511) :
(Et c'est pareil pour None utilisé en CAML, on se fiche de savoir ce que c'est, un pointeur ou un chou fleur... c'est le néant, c'est tout).
)Mais on s'en fout de ces considérations d'implémentation... C'est exactement la même sémantique, point.

(évidemment, CAML te permet à la fois d'interdire le pointeur nul et d'interdire l'arithmétique de pointeur
Hippopotame (./515) :Yoshi Diabolique (./511) :
(Et c'est pareil pour None utilisé en CAML, on se fiche de savoir ce que c'est, un pointeur ou un chou fleur... c'est le néant, c'est tout).
Dis ça au typeur, il va être content !
None est une value bien concrète, de type 'a option.
(de même que le pointeur nul est une value bien concrète, de type A*)[/cite]Comme d'ailleurs () qui est une autre value, de type unit, et qui serait d'ailleurs un bien meilleur candidat pour ton pseudo-null en caml. (Chais pas pourquoi t'as été cherché ce None qui est très anecdotique)
), alors que None contient une information qui le différencie de Some ptr...Mais on s'en fout de ces considérations d'implémentation... C'est exactement la même sémantique, point.
Complètement rien à voir.
Et la liste vide, c'est aussi un NULL pour toi?
(évidemment, CAML te permet à la fois d'interdire le pointeur nul et d'interdire l'arithmétique de pointeur
Allez, je vais t'apprendre un truc marrant :
Ya pas de pointeur en caml. (à la rigueur des 'a ref)

type 'a ptr = ('a array*int) option
let null = (None:'a ptr)
let calloc n zero = (Some (Array.make n zero,0):'a ptr)
let deref (Some (v,i):'a ptr) = v.(i)
let modify (Some (v,i):'a ptr) x = v.(i) <- x
let add (Some (v,i):'a ptr) j = (Some (v,i+j):'a ptr)
let sub (Some (v,i):'a ptr) (Some (_,j):'a ptr) = j-i
Oui(de même que le pointeur nul est une value bien concrète, de type A*)
(bref ce n'est pas le néant ou autres calembredaines mystiques).Ah non, () ça n'a strictement rien à voir ! () ne contient aucune information, alors que None contient une information qui le différencie de Some ptr...
Enfin on pourrait aussi se débrouiller, en définissant un type Null () | NonNull ptr, hein, mais c'est idiot parce que le built-in None | Some ptr fait exactement la m^me ehcose...
Ah non, la liste vide, elle a une taille, on peut la manipuler, on peut lui concaténer des objets, bref, on peut la manipuler exactement comme une liste normale...
Ya pas de pointeur en caml. (à la rigueur des 'a ref)
Tu vois bien que null *c'est* None, et que ça n'a absolument rien à voir avec le reste des pointeurs... (d'ailleurs ça balance une exception dès qu'on y touche)
Hippopotame (./523) :Tu vois bien que null *c'est* None, et que ça n'a absolument rien à voir avec le reste des pointeurs... (d'ailleurs ça balance une exception dès qu'on y touche)
Ben chais pas moi, prends une variable pointeur en C, mets y la valeur binaire 0, et teste si c'est égal à null.
Alors est ce que null n'a vraiment absolument rien à voir avec le reste des pointeurs ?
Sur la majeure partie des archis, ça sera le cas. Mais ça dépend de l'implémentation ^^ Normalement, tu peux très bien décider que le pointeur Null vaut -1, par exemple 
squalyl (./525) :
je me sens pas du tout de votre niveau hein mais j'ai déja vu des #define NULL ((void*)0) ça peut vous aider?


Yoshi Rose (./535) :
Et quel genre de pseudo ?
(pas le temps pour les autres
(en plus ça n'a pas grand intérêt, faut dire...))
Hippopotame (./526) :
523> Oui, tout à fait. null est donc l'un des pointeurs, dont la valeur dépend de l'architecture, en général 0. Pas différent du reste des pointeurs, si ce n'est que les fonctions le testent.
D'ailleurs, dans la sémantique postée par yollux, il y a probablement une erreur ou quelque chose qui va pas : une fonction comme add peut renvoyer null.
int rajouter(int valeur) {
if (tableau[valeur]++ == 0)
valeurs++;
return tableau[valeur];
}int rajouter(int valeur) {
int t = tableau[valeur]++;
if (t == 0)
valeurs++;
return t+1;
}