2010-06-11 55 views
2

簡而言之,特徵結構是屬性 - 值對的無序列表。實現功能結構:使用哪種數據類型?

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

其可以是嵌入式:

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

可以分索引的東西,並共享價值

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

其中[1]是另一特徵的結構(即,其允許重入)。

我的問題是:什麼樣的數據結構會讓人覺得這應該被實施了以值以後訪問,於2個FTS之間進行統一,以「型」他們等

有一個完整的書這個,但它是在lisp,這簡化了列表處理。所以,我的選擇是:列表的散列,列表的列表或者trie。人們對此有何看法?

回答

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的相同表示形式。