Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Prolog] Breadth-first search

    26 novembre 2019 à 20:48:46

    Hello !

    Tout nouveau sur Prolog, j'essaie de comprendre comment ça fonctionne.

    J'ai un arbre :

    image

    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 :


    image

    Pour la recherche Depth-first, j'ai fait ça et ça fonctionne :

    search(A) :- write(A),
                test(A).
    
    test(A) :- nl,
              A is_parent B,
              print(B),
              test(B).

    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 !

    Je vous remercie par avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2019 à 9:39:21

      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

      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown