Redéfinir une liste
Résolu
Sara426
Messages postés
678
Date d'inscription
Statut
Membre
Dernière intervention
-
Sara426 Messages postés 678 Date d'inscription Statut Membre Dernière intervention -
Sara426 Messages postés 678 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je programme en Caml et j'ai besoin d'un petit coup de main.
La question est idiote mais ça fait plus de 1 heure que j'y suis dessus.
J'ai une liste h = [0.] et
une fonction "ajouter x l = x::l" qui concatène x à l
Seulement quand je tape "ajouter 2. h" -> "-float list = [2.;0.]" Jusqu'ici c'est bon.
Mais si je fais "ajouter 3. h" -> "-float list = [3.;0.]" PROBLEME
Comment je dois faire pour qu'il garde en h les actions que j'ai fait avant.
Merci.
Cordialement,
Sara.
Je programme en Caml et j'ai besoin d'un petit coup de main.
La question est idiote mais ça fait plus de 1 heure que j'y suis dessus.
J'ai une liste h = [0.] et
une fonction "ajouter x l = x::l" qui concatène x à l
Seulement quand je tape "ajouter 2. h" -> "-float list = [2.;0.]" Jusqu'ici c'est bon.
Mais si je fais "ajouter 3. h" -> "-float list = [3.;0.]" PROBLEME
Comment je dois faire pour qu'il garde en h les actions que j'ai fait avant.
Merci.
Cordialement,
Sara.
A voir également:
- Redéfinir une liste
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
- Liste site streaming illégal - Accueil - Services en ligne
3 réponses
"ajouter" ne modifies pas h, il créé une nouvelle liste indépendante.
Il faut que tu fasses h = ajouter 2.0 h;; pour modifier h.
La confiance n'exclut pas le contrôle
Il faut que tu fasses h = ajouter 2.0 h;; pour modifier h.
La confiance n'exclut pas le contrôle
Je recommence plus clair :
Mon fichier de départ :
let fichier =
[ ["pre";"02";"018392c0";"1c3b0000";"000003e8";"1b";"20546558206f757470757420323031312e30392e32393a31343234"];
["bop";"00000001";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"ffffffff"];
["push"];
["down3";"f20000"];
["pop"];
["down4";"028333da"];
["push"];
["down4";"fd8736d0"];
["push"];
] ;;
La fonction pre qui calcule juste la valeur dont j'ai besoin
let pre l =
let nume = (numero 2 l)
and den = (numero 3 l)
and mag = (numero 4 l) in
(hexa mag)*.(hexa nume)/.(10000.*.(hexa den)) ;;
La fonction qui lit le fichier et qui appelle pre
let lecture f = (*f sera le fichier appelé *)
let ligne = (top f) in
let fonction = (top ligne) and argument = (reste ligne) in
if fonction = "pre"
then let h = (ajouter (pre (argument) ) h) in h
else ....... ;;
La fonction lecture doit lit le premier élément du fichier.
Si c'est "pre", il doit appeller pre avec le reste de la liste, calculer la valeur et la mettre dans h.
Mon fichier de départ :
let fichier =
[ ["pre";"02";"018392c0";"1c3b0000";"000003e8";"1b";"20546558206f757470757420323031312e30392e32393a31343234"];
["bop";"00000001";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"00000000";"ffffffff"];
["push"];
["down3";"f20000"];
["pop"];
["down4";"028333da"];
["push"];
["down4";"fd8736d0"];
["push"];
] ;;
La fonction pre qui calcule juste la valeur dont j'ai besoin
let pre l =
let nume = (numero 2 l)
and den = (numero 3 l)
and mag = (numero 4 l) in
(hexa mag)*.(hexa nume)/.(10000.*.(hexa den)) ;;
La fonction qui lit le fichier et qui appelle pre
let lecture f = (*f sera le fichier appelé *)
let ligne = (top f) in
let fonction = (top ligne) and argument = (reste ligne) in
if fonction = "pre"
then let h = (ajouter (pre (argument) ) h) in h
else ....... ;;
La fonction lecture doit lit le premier élément du fichier.
Si c'est "pre", il doit appeller pre avec le reste de la liste, calculer la valeur et la mettre dans h.
Je te remercie infiniment pour ton aide mais je laisse tomber avec Caml.
Je viens d'apprendre Python à moins de 2 heures et pour le moment ça marche beaucoup mieux que Caml (surtout pour tout ce qui est des types)
Encore merci pour tout et désolé que ça n'est servit à rien mais il faut bien avouer que Caml est très primitif pour programmer.
Je viens d'apprendre Python à moins de 2 heures et pour le moment ça marche beaucoup mieux que Caml (surtout pour tout ce qui est des types)
Encore merci pour tout et désolé que ça n'est servit à rien mais il faut bien avouer que Caml est très primitif pour programmer.
Je ne rejoins pas ton avis sur la "primitivité" de Caml, c'est un langage très puissant, en particulier son typage fort qui permet de faire des programmes très sûrs.
Mais tout les langages ont leurs avantages et leurs inconvénients et certains s'adaptent mieux à certains besoins que d'autres. Et peut-être qu'effectivement pour ton problème le Python est plus adapté, mais ça ne fait pas de Caml un langage primitif ;-)
Mais tout les langages ont leurs avantages et leurs inconvénients et certains s'adaptent mieux à certains besoins que d'autres. Et peut-être qu'effectivement pour ton problème le Python est plus adapté, mais ça ne fait pas de Caml un langage primitif ;-)
Donc h doit se modifier uniquement après l'appel de la fonction.
Si je tape
let h = ajouter (fonction f ) h ;;
(avec f l'argument de la fonction)
Il me répond Valeur f inconnue (logique puisque la fonction n'a pas encore été lancée)
Donne moi le code de "fonction" et quelques explications sur ce qu'il faut faire.
let nume = (numero 2 l)
and den = (numero 3 l)
and mag = (numero 4 l) in
let t = (hexa mag)*.(hexa nume)/.(10000.*.(hexa den)) in t ;;
avec numero x l qui prend l'élément placé en x position de la liste l
et hexa h qui passe un nombre hexadecimal en decimal
(ces deux fonctions marchent très bien, je les ai testé)
Je voudrais que la valeur t soit mis dans la liste h.