实现功能结构:使用什么数据类型?

时间:2010-06-11 01:13:58

标签: c data-structures

简单来说,特征结构是属性 - 值对的无序列表。

[number:sg, person:3 | _ ],

可以嵌入:

 [cat:np, agr:[number:sg, person:3 | _ ] | _ ],

可以对内容进行子索引并共享值

[number:[1], person:3 | _ ],

其中[1]是另一个特征结构(也就是说,它允许重入)。

我的问题是:人们认为应该实现哪些数据结构以便以后访问值,在2 fts之间执行统一,“键入”它们等等。

有一本关于此的完整书籍,但它在lisp中,这简化了列表处理。所以,我的选择是:列表的哈希,列表列表或者trie。人们对此有何看法?

1 个答案:

答案 0 :(得分:1)

稍微考虑什么构成价值。 我会尝试最简单的方法:

typedef struct value {
   enum { INT, BOOL, STRING, FEATURE_STRUCTURE } ty;
   union {
     int int;
     bool bool;
     char *string;
     struct fs *feature_structure;
   } u;
} *Value;

typedef struct fs * { // list of pairs; this rep could change
    struct avpair *pair;
    Value value;
} *Feature_Structure;

struct avpair {
   const char *attribute;
   Value value;
};

你需要一堆构造函数,比如

Value mkBool(bool p) {
  Value v = malloc(sizeof(*v));
  assert(v);
  v->ty = BOOL;
  v->u.bool = p;
  return v;
}

此时你可以开始做生意了。如果“对列表”结果不是正确的表示,您可以更改它。如果不知道您计划的操作或您对成本模型的期望,我会从这里开始。然后,如果你需要转向更高效的东西,我可能会使用三元搜索树来表示一个特征结构,并为Value保留相同的表示。