2013-04-03 4 views
0

я в настоящее время застрял со следующей проблемой:Рекурсивный поиск в Схеме

У меня есть база данных п элементов, и я хочу сделать рекурсивный поиск, так что я буду получать все возможные совпадения.

Итак, скажем, я получаю k совпадений для первого шаблона. Для каждых k совпадений я обнаружил, что повторно просматриваю базу данных со следующим шаблоном и получаю новые списки ассоциаций ... и так далее. Это моя проблема, я не могу сделать функцию, которая даст мне все результаты.

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

Резюме моей идеи: Если у меня есть база данных = db и вам нужно сопоставить n шаблонов. Я начинаю с шаблона 0, получаю k-ассоциированный список, и я хочу двигаться вперед, чтобы соответствовать шаблону 1, имея в виду, что у меня есть k ассоциативных списков из предыдущего. Я завершаю шаблон 1 и получаю M-ассоциативный список, для каждого m-ассоциированного списка я иду вперед ... В конце концов, я либо получаю ассоциативный список размером n (количество шаблонов), либо получаю false.

Мне действительно нужны только некоторые идеи, поэтому я могу пройти мимо этой «кирпичной стены». Пожалуйста, судите, ударите, убейте мою идею, что угодно. Спасибо.

ответ

0

Я не уверен, хотите ли вы сузить или расширить свой поиск на основе последующих поисков. Вот псевдокод, расширяющий:

recursive_search (list_of_patterns) 
    if is_empty(list_of_patterns) 
    return empty_list 
    pattern = pop_first(list_of_patterns) 
    return query(pattern) + recursive_search(list_of_patterns) 

EDIT, чтобы сохранить ваш шаблон с запросом как ALIST ... моя схема-Foo слаб, но здесь идет:

(define query_alist (lambda x)(x . query-exec(x))) 

(define r_query (lambda pattern__list) 
    (cond 
    ((null pattern_list)()) 
    (else ((query_alist (first pattern_list) (r_query (rest pattern_list))) 
) 
) 
+0

Это то, что я на данный момент. Проблема в том, что я хотел бы сохранить списки ассоциаций со мной, когда я иду, и расширять их, поэтому, в конце концов, я получаю один большой список списков ассоциаций со всеми элементами, которые уважают исходные шаблоны. – Georgianaevil

+0

Я не пытался запустить код схемы, поэтому, вероятно, он глючит, но разве это ближе к тому, что вы ищете? –

Смежные вопросы