2013-04-03 3 views
0

Je suis actuellement coincé avec le problème suivant:recherche récursive dans le schéma

J'ai une base de données de n éléments et je veux faire une recherche récursive afin que j'obtenir toutes les correspondances possibles. Donc, disons, j'obtiens k correspondances pour le premier motif. Pour chaque k matches que j'ai trouvé, je recherche à nouveau la base de données avec le motif suivant et j'obtiens les nouvelles listes d'associations .... et ainsi de suite. C'est mon problème, je ne peux pas faire une fonction qui va me donner tous les résultats.

Je ne peux vraiment pas penser à un "plan" pour attaquer ce problème. Je me demande toujours comment sauvegarder mon assoc-list actuelle et, en même temps, l'enlever quand j'arrive à la fin.

Résumé de mon idée: Si j'ai une base de données = db et que j'ai besoin de faire correspondre n motifs. Je commence par le pattern 0, j'obtiens k assoc-list et je veux aller de l'avant pour faire correspondre le pattern 1, en gardant à l'esprit que j'ai k assoc-lists du précédent ,. Je termine le pattern 1 et j'obtiens M assoc-list, pour chaque m assoc-list je vais en avant ... A la fin je reçois soit une assoc-list de taille n (nombre de patterns) soit fausse. Je ne veux vraiment que quelques idées afin que je puisse passer ce «mur de briques». S'il vous plaît juger, poignarder, tuer mon idée, n'importe quoi. Je vous remercie.

Répondre

0

Je ne sais pas si vous souhaitez restreindre ou élargir votre recherche en fonction de recherches ultérieures. Voici pseudocode qui élargit:

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 pour garder votre modèle avec la requête en tant alist ... mon schéma-foo est faible, mais voilà:

(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

C'est ce que je suis faire pour le moment. Le problème que j'ai, c'est que je voudrais garder les listes d'associations avec moi au fur et à mesure que je les élargis pour finalement avoir une grande liste de listes d'associations avec tous les éléments qui respectent les schémas initiaux. – Georgianaevil

+0

Je n'ai pas essayé d'exécuter le code du système, donc c'est probablement buggé, mais est-ce plus proche de ce que vous cherchez? –