problème en camL - Programmation
Marsh Posté le 30-07-2002 à 00:04:06
malheursement g abandonné la prépa et caml avec masi
ce serati pas une mauvaise portée de variable avec
let matrice_suivante = make_matrix (vect_length matrice) (vect_length matrice) 1 in
^^
Marsh Posté le 30-07-2002 à 17:34:07
bon j'ai simplifié :
Code :
|
ensuite je l'utilise :
Code :
|
alors que quand j'utilise comme ça :
Code :
|
ça marche très bien.
or il faut que j'utilise plusieurs fois "comparaison"
Marsh Posté le 30-07-2002 à 18:21:14
(au passage cmlc c génial pr le récursif... g fait un algo de huffman récursif, c t trop court en terme de code... en 5-6lignes tu fais des algos trop piussants)
alors ton pb il est simple
Code :
|
c'est un bool....
or tu le fais suivre d'un ";", il ne faut pas car l'expression a un type caml ne sait pas ce qu'il faut en faire ... il essaye de le faire passer sans type
Code :
|
ca aussi c un bool, mais comme derriere il y a un ;; c'est normal, c'est la valeur qu'il doit renvoyer
je sias pas quel est ton algo pour corriger
Marsh Posté le 30-07-2002 à 18:31:40
je comprends pas justement pourquoi
Code :
|
est un bool
car je veux mettre dans matrice_suivante.(0).(0) le résultat de "comparasion" qui est un int donc logiquement ça devrait être un int l'expression ci dessus.
idem pour
matrice_suivante.(vect_length matrice-1).(0)
matrice_suivante.(0).(vect_length matrice-1)
matrice_suivante.(vect_length matrice-1).(vect_length matrice-1)
bref la fonction est :
Code :
|
et doit donner la matrice successive de la matrice donné en entrée suivant les règles du jeux de la vie.
Marsh Posté le 30-07-2002 à 18:52:17
ca fait pas longtemps que tu fais tu caml
pour assigner a un vecteur on fait comme ca
vecteur.(indice)<-valeur
no comment
Marsh Posté le 30-07-2002 à 19:30:34
j'ai corrigé l'algo d'avant (morceaux en gras) (y'a un bug ave le forum, verifie caractere par caractere)
Code :
|
Marsh Posté le 30-07-2002 à 21:22:47
bah euh disons que ça fait plutôt un an que j'en ai pas fait et bon je me suis remis à ça y'a deux jours donc faut que je me réhabitue avec la syntaxe !
Marsh Posté le 30-07-2002 à 21:42:57
ben moi ca faisait un an que j'en avais pas fait, et j'ai retrouvé la syntaxe rien que pour toi ! en gros g bossé a ta place !
(dans quel cadre tu t'y es remis ?)
Marsh Posté le 30-07-2002 à 22:53:36
je voulais faire le jeu de la vie en l'adaptant un peu pour le mettre en 3d et avec un système d'évolution. je vais faire ça en c++ et en opengl mais bon préfère trouver l'algo d'abord en caml et ensuite traduire tout ça en c++ avec de l'opengl.
en ce qui concerne le vect_assign le plus con c que j'avais bien utilisé le <- au lieu de = une dizaine de ligne au dessus dans une autre fonctoin
ah là là que d'erreur. bon là j'y suis presque j'ai juste une erreur :
#Uncaught exception: Invalid_argument "vect_item"
mais bon ça je pense savoir d'ou ça vient. étant donné que je fais tout le tour de la matrice et que je dois regarder l'état de tous les cellules adjacentes j'ai du mettre un + au lieu d'un moins quelques parts. bref verrait ça demain car là fatigué !!!
je mes tjrs le code de ce que j'ai fais pour l'instant (si ça peut intéresser quelqu'un ) :
Code :
|
BONNE NUIT !
Marsh Posté le 30-07-2002 à 23:47:10
ben disons que les algos sous caml et c++ c pas tellemtn al meême maniere caml eet archi type et récursif
Marsh Posté le 31-07-2002 à 09:29:26
oui mais je trouve que avec un fort typage on a un algo bien propre et pour le récursif je sais pas ce que ça donne en c++
je sais que c super pratique en camL le récursif (j'adore ).
Marsh Posté le 31-07-2002 à 09:55:23
allez pour le plaisir : algo de huffman
Code :
|
pour décompresser, copie la liste de bits et l'arbre en parametres
Marsh Posté le 31-07-2002 à 11:55:08
lordankou a écrit a écrit : oui mais je trouve que avec un fort typage on a un algo bien propre et pour le récursif je sais pas ce que ça donne en c++ |
Disons que si tu codes tout de go en recursif en C++
meme pour du terminal il ne va pas te dérécursifier à la main.
Par contre, il y a des cas ou dérécursifier passe par une gestion manuelle d'une pile, donc ca peut-etre un plus si tu laisses le langage gérer la pile pour toi.
Sauf qu'evidemment la pile a une taille limitée en mémoire (par l'OS ou le langage) et donc parfois tu ne peux pas faire sans gérer ta pile sans reposer sur celle du système .
Sinon Caml est tres bon pour plein de choses pas seulement le recursif mais passons.
A+
LeGreg
Marsh Posté le 18-08-2002 à 23:05:53
et bon voilà ça marche mais bon ça c vraiment que le début. il faut que j'inclus la 3e dimension et ensuite rajouter peut être une notion de temps
Code :
|
Marsh Posté le 19-08-2002 à 01:25:43
lordankou a écrit a écrit : il sert à quoi l'algo de huffman ? |
c'est une méthode de compression je crois
il me semble que c'est ca qui est tombé a mon exam de juin (que j'ai eu sans rien foutre)
Marsh Posté le 29-07-2002 à 23:27:01
bon voila le code :
let comparaison matrice matrice_suivante nombre i j =
match nombre with
|0 -> if (matrice.(i).(j)=1) then matrice_suivante.(i).(j)=0 else matrice_suivante.(i).(j)=1
|1 -> if (matrice.(i).(j)=1) then matrice_suivante.(i).(j)=0 else matrice_suivante.(i).(j)=1
|2 -> if (matrice.(i).(j)=1) then matrice_suivante.(i).(j)=1 else matrice_suivante.(i).(j)=1
|3 -> if (matrice.(i).(j)=0) then matrice_suivante.(i).(j)=1 else matrice_suivante.(i).(j)=0
|_ -> if (matrice.(i).(j)=0) then matrice_suivante.(i).(j)=1 else matrice_suivante.(i).(j)=0;;
let successeur_matrice matrice =
let matrice_suivante = make_matrix (vect_length matrice) (vect_length matrice) 1 in
comparaison matrice matrice_suivante (matrice.(1).(0)+matrice.(1).(1)+matrice.(0).(1)) 0 0 ;
comparaison matrice matrice_suivante (matrice.(1).(0)+matrice.(1).(1)+matrice.(0).(1)) (vect_length matrice-1) 0 ;
comparaison matrice matrice_suivante (matrice.(1).(0)+matrice.(1).(1)+matrice.(0).(1)) 0 (vect_length matrice-1) ;
comparaison matrice matrice_suivante (matrice.(1).(0)+matrice.(1).(1)+matrice.(0).(1)) (vect_length matrice-1) (vect_length matrice-1) ;
for compteur = 1 to (vect_length matrice-2) do
for compteur2 = 1 to (vect_length matrice.(compteur)-2) do
match (matrice.(compteur-1).(compteur2-1)+matrice.(compteur-1).(compteur2)+matrice.(compteur-1).(compteur2+1)+matrice.(compteur).(compteur2-1)+matrice.(compteur).(compteur2+1)+matrice.(compteur+1).(compteur2-1)+matrice.(compteur+1).(compteur2)+matrice.(compteur+1).(compteur2+1)) with
|2 -> if (matrice.(compteur).(compteur2)=1) then matrice_suivante.(compteur).(compteur2)=1 else matrice_suivante.(compteur).(compteur2)=1
|3 -> if (matrice.(compteur).(compteur2)=0) then matrice_suivante.(compteur).(compteur2)=1 else matrice_suivante.(compteur).(compteur2)=1
|_ -> if (matrice.(compteur).(compteur2)=1) then matrice_suivante.(compteur).(compteur2)=0 else matrice_suivante.(compteur).(compteur2)=0
done ;
done ;
matrice = matrice_suivante ;;
et j'obtiens comme erreur :
Toplevel input:
> comparaison matrice matrice_suivante (matrice.(1).(0)+matrice.(1).(1)+matrice.(0).(1)) 0 0 ;
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning: this expression has type bool,
but is used with type unit.
et franchement là je comprends pas. c pas de type bool pourtant.
---------------