3

我正在尝试在 Promela 中制作 B-Tree,以便我可以证明有关它的内容,但是,Promela 似乎不支持递归数据类型。这不起作用:

#define n 2
typedef BTreeNode
{
    int keys[2*n-1];
    BTreeNode children[2*n];
    int c;
};

如何在 Promela 中制作 B-Tree,如果不能,您会建议使用哪种工具?我考虑过 QuickCheck 和 Prolog。然而,在 Prolog 中制作 B-Tree 也很困难。

4

1 回答 1

3

You'll represent the children using an index into a statically defined array of nodes. Like this:

#define n 2

#define BTreeNodeId   byte
typedef BTreeNode {
  BTreeNodeId my_id;
  int keys[2*n-1];
  BTreeNodeId children[2*n];
  int c;
};

BTreeNode nodes [10];
byte next_node_id = 0;

With this, you 'allocate' nodes by incrementing next_node_id and can access a child by referencing into nodes using the child's id.

于 2014-01-04T18:54:36.673 回答