Est-ce possible?Structure de données OCaml impérative avec des pointeurs?
Salut à tous,
dans ma classe on nous a dit de mettre en œuvre arbres binaires de recherche en OCaml, en utilisant la programmation fonctionnelle et impérative. Nous suivons un ADT et implémentation en Pascal, un langage procédural où les pointeurs sont utilisés.
Voici comment la structure de données ressemble à:
# Pascal
type
tKey = integer;
tPos = ^tNode;
tNode = record
key : tKey;
left, right : tPos;
end;
tBST = tPosT;
Nous avons également eu quelques opérations BST de base. Voici un exemple d'un, si cela pouvait aider:
# Pascal
procedure add_key(VAR T : tBST; k:tKey);
var new, parent, child : tBST;
begin
createNode(new);
new^.key := k;
new^.left := nil;
new^.right := nil;
if T=nil then
T := new
else begin
parent := nil;
child := T;
while (child <> nil) and (child^.key <> k) do begin
parent := child;
if k < child^.key then
child := child^.left
else
child := child^.right;
end;
if (child = nil) then
if k < parent^.key then
parent^.left := new
else
parent^.right := new;
{ duplicates are ignored }
end;
end;
Voici comment mon fonctionnel (si cela a du sens) structure de données ressemble à:
type key =
Key of int;;
type bst =
Empty
| Node of (key * bst * bst);;
Cependant, j'ai de gros problèmes en utilisant la facette impérative de OCaml. Je dois le rendre aussi similaire que possible à l'implémentation Pascal et je ne connais pas les possibilités de structures de données et de pointeurs dans OCaml puisque j'ai toujours programmé en utilisant récursif et ainsi de suite. Je pensais utiliser plusieurs "let", if et else, mais je ne sais pas comment définir ma structure de données. Apprécierait énormément de contribution à ce sujet.
Puis-je demander ce qu'il y a? est-il utilisé pour abstraire la valeur du noeud? Oui, fondamentalement ce que vous avez dit est ce qui se passe. Mon type doit ressembler autant que possible à celui de pascal. Non seulement la façon dont cela fonctionne. Je vais essayer avec ton type et continuer à enquêter pendant ce temps. – deko
Un mauvais copier/coller ;-) J'ai mis à jour ma réponse car elle est censée être 'key' – Lhooq