Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/12/2006, à 02:09

bolzano-weierstrass

CAML - problème avec if

Salut.

Je représente un point par un tableau de dim 2 (abscisse/ordonnée)

A partir d'un nombre n de points que je stocke dans un tableau, je veux créer une liste d'entier qui stocke les coordonnées d'un pt si la distance de ce pt est inférieur à 10 par rapport à un autre point, et qui ne stockera pas les coordonnées de ce point si la distance est supérieur à 10.

Et je fais ca pour tout les pts.

Voilà les programmes (simplissimes pourtant)

let dist a b =
		( b.(0) - a.(0) ) * (b.(0) - a.(0) ) + ( b.(1) - a.(1) ) * (b.(1) - a.(1) )  ;;
let liste t  = 
       let n = vect_length t 
       and resultat = []
              for i=0 to n-1 do
		for j=0 to n-1-i do
			if  i<>j  && ( dist t.(i) t.(j) < 100 )  then 
                                          [t.(i)]::resultat
			else  resultat
		       done ; 
               done ;

resultat;;

Dist fonctionne (no blem).

Mais je ne comprend pas du tout pourquoi CAML me renvois ca pour Liste (et ca m'embete bien)

Toplevel input:
>				if i<>j && ( dist t.(i) t.(j) < 100 )  then 
                                                    1::resultat
>				else  resultat
Warning: this expression has type int list,
but is used with type unit.

si qqun pouvait m'aider smile

#2 Le 24/12/2006, à 02:12

bolzano

Re : CAML - problème avec if

dsl il me renvois

Toplevel input:
>				if i<>j && ( dist t.(i) t.(j) < 100 )  then [t.(i)]::new
>						     		       else  new
Warning: this expression has type int vect list list,
but is used with type unit.

#3 Le 24/12/2006, à 11:46

clem-vangelis

Re : CAML - problème avec if

je ne connais pas le caml mais que signifie cette condition ?: i<>j

au passage c'est pas la bonne section pour ça je pense

Hors ligne

#4 Le 24/12/2006, à 11:58

bolzano-weierstrass

Re : CAML - problème avec if

i <>j  signifie i différent de j

sinon quel est la section appropriée ?

merci

#5 Le 24/12/2006, à 12:17

clem-vangelis

Re : CAML - problème avec if

un modérateur qui passera par la pour déplacer ça dans programmation

Hors ligne

#6 Le 24/12/2006, à 13:05

Smarter

Re : CAML - problème avec if

Déplacé wink

Hors ligne

#7 Le 26/12/2006, à 01:22

foobar2000

Re : CAML - problème avec if

Ce n'est pas reellement un probleme, le fait est que dans une boucle for, tu ne devrais avoir que des expressions qui ne renvoient rien (type unit). La tu renvoies des listes au lieu d'un unit, donc il te previent, mais ca marche quand meme.

source : http://www.ocaml-tutorial.org/if_statements,_loops_and_recursion


Aucun rapport avec le logiciel du même nom.

Hors ligne

#8 Le 26/12/2006, à 15:00

foch

Re : CAML - problème avec if

<HS>
Faut vraiment être en prépa pour avoir un pseudo pareil et faire du Caml le jour de noël big_smile

t'inquiète pas, on est nombreux à être passé par là, et on n'est pas mort !

le Caml ça poutrait bien quand même, dommage qu'on s'en serve plus après...
</HS>


De retour sous Ubuntu après quelques années sous ArchLinux.

Programme de téléchargement de musique qui ne marche plus vraiment.

Hors ligne

#9 Le 26/12/2006, à 17:07

Freddy

Re : CAML - problème avec if

foobar2000 > Moi, on m'a expliqué que si Caml acceptait autre chose que du type unit dans un while ou un for, c'est parce que c'est un langage extrêmement laxiste concernant la syntaxe...

Chez moi, ça ne compile même pas, vu qu'il n'y a pas de in après la définition des variables locales... Il y a donc déjà ceci à corriger.
Ensuite, il faudrait que résultat soir une référence vers une liste, afin d'être modifié :

let liste t  = 
  let n = vect_length t 
  and resultat = ref [] in
    for i = 0 to n - 1 do
      for j = 0 to n - 1 - i do
        if i<>j  && (dist t.(i) t.(j) < 100)
        then resultat := [t.(i)]:: !resultat
        else ()
      done
    done;
    resultat;;

Question : le parcours du tableau me semble un peu bizarre. Ne serait-il pas plus naturel de le parcourir pour i allant de 0 à n - 1, puis à i fixé, pour j allant de i + 1 à n - 1 ? Cela aurait l'avantage d'éliminer le besoin de tester si i et j sont différents.
Aussi, pour les coordonées des points, pourquoi est-ce que tu n'utilises pas un couple d'entier plutôt qu'un tableau à deux cases ?


There is no system but GNU, and Linux is one of its kernels.

Hors ligne

#10 Le 26/12/2006, à 20:38

foobar2000

Re : CAML - problème avec if

foch> Tu parles pas de moi quand meme ? J'ai poste ce message le 26 tongue.

Freddy> Effectivement, "[t.(i)]::resultat" ne change pas la valeur de "resultat". Ce que je voulais dire c'est qu'un warning ce n'est pas une erreur, ca n'empeche pas le programme de fonctionner. Apres, c'est vrai que son programme ne marche pas comme il le voulait, mais sa question ne concernait que le warning, je suis donc pas alle plus loin.

Dernière modification par foobar2000 (Le 26/12/2006, à 20:41)


Aucun rapport avec le logiciel du même nom.

Hors ligne

#11 Le 27/12/2006, à 00:43

foch

Re : CAML - problème avec if

non je parle au mec qui a un pseudo de théorème sur les espaces compacts lol
http://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_de_Bolzano-Weierstrass


De retour sous Ubuntu après quelques années sous ArchLinux.

Programme de téléchargement de musique qui ne marche plus vraiment.

Hors ligne

#12 Le 02/01/2007, à 17:42

bolzano-weierstrass

Re : CAML - problème avec if

merci les gars pour vos réponses

hihi j'ai réussi autrement en gérant les données avec des tableaux.

je bosse sur mon tipe actuellement "dynamique des pop. et modèle proie - prédateur",  le truc c'était pour faire reproduire mes espèces animales (à une certaine distance, une autre apparait, ici dans la liste qui stoke les individus d'une même race).

il ne me reste plus qu'à créer "la mort" et un système de prédation et ce sera ok.

a+ peut-être !