Bonjour,
Je voudrais créer un prédicat qui calcule la distance entre un point précis et chaque couple de coordonnées stocker dans une liste.
soit mon point : [x,(1,0)]
ma liste de coordonnées : [ [1,0], [3,1], [5,3], [0,4] ]
Puis je voudrais stocker ces distance dans une autre liste. J'appelle mon précidat comme ceci :
Voici son code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part dist_all( [x,(1,0)], [[1,0],[3,1],[5,3],[0,4]], Liste).
Voici mon prédicat distance:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 dist_all( [_,(_,_)] ,[],_):-!. dist_all([Prod,(X,Y)],[[X,Y]|L],ListeR) :- !, dist_all([Prod,(X,Y)],L,ListeR). dist_all( [Prod,(X,Y)] , [[X1,Y1]|L], ListeD) :- distance( [_,(X,Y)], [X1,Y1], D), ajout( D, Lbis, ListeD), dist_all( [Prod,(X,Y)] , L, Lbis).
Voici mon prédicat ajout :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 distance([_,(X,Y)], [X1,Y1],R) :- V is (X-X1)*(X-X1)+(Y-Y1)*(Y-Y1), R is sqrt(V)*100.
Mon problème vient de ce dernier, en effet je n'arrive pas a le coder correctement , ou a l'utiliser de maniere à ce qu'il me renvoie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ajout([],_,[]). ajout(D,Lbis, ListeD) :- ListeD =[D|Lbis].
Liste = [223.607, 500.0, 412.311]
En fait comme ma liste Lbis est toujours vide, et bien j'obtiens comme resultat :
Liste = [223.607, 500.0, 412.311|_G22595] avec Lbis qui a toujours la valeur _G22595,
j'ai essayé beaucoup de choses, notamment faire un prédicat ajout pour si Lbis est vide alors créer directement ListeD = [D] , mais cela ne marche pas non plus
Quelqu'un pourrait-il m'aider c'est tres important !!
Merci d'avance pour toute réponse,
Bonne Journée
Partager