Pages : 1
#1 Le 24/12/2006, à 01: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
#2 Le 24/12/2006, à 01: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, à 10: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, à 10: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, à 11: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, à 12:05
- Smarter
Re : CAML - problème avec if
Déplacé
Hors ligne
#7 Le 26/12/2006, à 00: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, à 14: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
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, à 16: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, à 19:38
- foobar2000
Re : CAML - problème avec if
foch> Tu parles pas de moi quand meme ? J'ai poste ce message le 26 .
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, à 19:41)
Aucun rapport avec le logiciel du même nom.
Hors ligne
#11 Le 26/12/2006, à 23: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
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, à 16: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 !
Pages : 1