Tout nouveau sur Prolog, j'essaie de comprendre comment ça fonctionne.
J'ai un arbre :
Avec ce code :
/* The tree database */
:- op(500,xfx,'is_parent').
a is_parent b. c is_parent g. f is_parent l. j is_parent q.
a is_parent c. c is_parent h. f is_parent m. j is_parent r.
a is_parent d. c is_parent i. h is_parent n. j is_parent s.
b is_parent e. d is_parent j. i is_parent o. m is_parent t.
b is_parent f. e is_parent k. i is_parent p.
J'aimerais réaliser une recherche depth-first et une recherche breadth-first. Pour représenter cela :
Pour la recherche Depth-first, j'ai fait ça et ça fonctionne :
J'ai le bon résultat : a -> b -> e -> k -> f -> l -> m -> t -> c -> g -> h -> n -> i -> o -> p -> d -> j -> q -> r -> s
Mais je ne vois vraiment pas comment faire pour la recherche breadth-first. Je ne sais pas par quoi commencer. J'aimerais que l'affichage soit celui-ci :
a -> b -> c -> d-> e -> f -> g -> g -> h -> i -> i -> j -> k -> l -> m -> n -> o -> p -> q -> r -> s -> t
Si quelqu'un s'y connait bien et a une idée pour ce soucis, n'hésitez pas !
Pour obtenir tous les enfants d'un noeud, utilise bagof(Y, X is_parent Y, Children). Dans Children tu auras tous les enfants de X.
Seul problème, si X n'a pas d'enfants cela échoue , donc if faut écrire un prédicat get_children qui renvoie la liste des fils s'ils existent, ou [] sinon.
Ensuite tu rappelles ton prédicat avec la nouvelle liste de fils devenus parents obtenue !
Bon courage et n'hésite pas à poser des questions.
- Edité par joel76 27 novembre 2019 à 9:42:41
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !
[Prolog] Breadth-first search
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !