Redéfinir une liste

Résolu/Fermé
Sara426 Messages postés 678 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 5 nov. 2011 à 16:10
Sara426 Messages postés 678 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 8 nov. 2011 à 08:15
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
Modifié par KX le 5/11/2011 à 16:16
"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 mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
5 nov. 2011 à 16:19
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
5 nov. 2011 à 16:30
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 mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
6 nov. 2011 à 16:01
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
6 nov. 2011 à 16:11
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 mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
6 nov. 2011 à 16:14
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 mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
6 nov. 2011 à 17:09
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
6 nov. 2011 à 17:20
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 mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
6 nov. 2011 à 17:24
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 mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
7 nov. 2011 à 21:22
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
8 nov. 2011 à 06:58
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 mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 63
8 nov. 2011 à 08:15
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