这样的事情可能吗?
大家好,
在我的课堂上,我们被告知使用函数式和命令式编程在 OCaml 中实现二叉搜索树。我们正在关注 ADT 和 Pascal 中的实现,Pascal 是一种使用指针的过程语言。
这是数据结构的样子:
# Pascal
type
tKey = integer;
tPos = ^tNode;
tNode = record
key : tKey;
left, right : tPos;
end;
tBST = tPosT;
我们还获得了一些基本的 BST 操作。这是一个例子,如果有帮助的话:
# 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;
这就是我的功能(如果有任何意义)数据结构的样子:
type key =
Key of int;;
type bst =
Empty
| Node of (key * bst * bst);;
但是,我在使用 OCaml 的命令方面遇到了很大的麻烦。我必须让它看起来尽可能与 Pascal 实现相似,而且我不知道 OCaml 中数据结构和指针的可能性,因为我一直使用递归等进行编程。我正在考虑使用多个“let”、if 和 else,但我不知道如何定义我的数据结构。非常感谢您对此的大力投入。