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   -
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.

A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"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
0
Sara426 Messages postés 678 Date d'inscription   Statut Membre Dernière intervention   63
 
Sauf que le nombre à ajouter à la liste vient d'une autre fonction.
Donc h doit se modifier uniquement après l'appel de la fonction.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Ici h ne sera bien modifié qu'une fois la fonction ajouter terminée puisque c'est le résultat du tout qui va être affecté à h, et que ce tout doit être connu avant.

let h = ajouter blabla() h;
0
Sara426 Messages postés 678 Date d'inscription   Statut Membre Dernière intervention   63
 
Marche pas.

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)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Ce dont tu parles n'est donc pas une erreur sur "ajouter", mais sur "fonction"
Donne moi le code de "fonction" et quelques explications sur ce qu'il faut faire.
0
Sara426 Messages postés 678 Date d'inscription   Statut Membre Dernière intervention   63
 
let pre l =
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.
0
Sara426 Messages postés 678 Date d'inscription   Statut Membre Dernière intervention   63
 
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.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
J'imagine que top et reste sont deux méthodes qui te permettent de traiter le fichier...
Ce que tu peux faire c'est ça :

let h = 
    if fonction = "pre"
    then ajouter (pre argument) h
    else h; // ou une autre liste
0
Sara426 Messages postés 678 Date d'inscription   Statut Membre Dernière intervention   63
 
Exact. C'est pas bête comme solution.
J'essaierais ce soir, là je dois partir.

Je te tiens au courant.

Merci beaucoup.
0
Sara426 Messages postés 678 Date d'inscription   Statut Membre Dernière intervention   63
 
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.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 ;-)
0
Sara426 Messages postés 678 Date d'inscription   Statut Membre Dernière intervention   63
 
C'est vrai je suis d'accord. Caml est très pointu sur le typage et si tu veux faire quelque chose de fort pour ça il est parfait.
Par contre je pense qu'à mon niveau c'est prise de tête pour pas grand chose.

Tu as l'air de beaucoup programmer en caml, non ?
0