Bonjour,
Le but du code est de redéfinir findall.
1. Excusez, j'ai eu beau lire la doc. Je n'arrive toujours pas à faire la différence entre l'opérateur = , l'opérateur is et l'opérateur =:=.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 aime(toto, titi). aime(tutu, lala). trouvetout(Var, Pred, L) :- L = [], Pred, % Va Appeller aime(Var, _) donc met toto, tutu... dans Var L = [Var|L], fail. amoureux(L) :- trouvetout(D, aime(D, _), L).
2. D'après ce que j'ai compris, le problème ici est que L prend une valeur au départ donc on aura L=[], ensuite quand on veut faire L=[toto] (Le premier amoureux de notre liste), prolog fait []=[toto] ce qui donne fail et backtrack ?
Est ce bien ça ? Comment faire alors pour accumuler dans une liste sachant que le même problème se pose pour le append?
3. Est ce la meilleur façon (algoritment parlant) de le faire ?
Désolé pour toutes ces questions . Je vous remercie.
Partager