2010-06-11 2 views
2

В упрощенном виде структура объектов представляет собой неупорядоченный список пар атрибут-значение.реализация структур функций: какой тип данных использовать?

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

, которые могут быть встроены:

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

может субиндекс материала и доля значения

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

, где [1] является другой структурой функции (то есть, она позволяет повторную входимость).

Мой вопрос: структура, какие данные будут люди думают, что это должно быть реализовано с для последующего доступа к значениям, чтобы выполнить объединение между 2 FTS, чтобы «типа» их и т.д.

Существует полная книга по это, но это в lisp, что упрощает обработку списка. Итак, мои варианты: хеш списков, список списков или три. Что люди думают об этом?

ответ

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.