Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Caml
Caml Forum d'entraide sur la programmation avec les langages fonctionnels Caml-Light et OCaml
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/11/2012, 21h45   #1
beautifulmind
Invité de passage
 
zvenden atchum
Inscription : juin 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : zvenden atchum

Informations forums :
Inscription : juin 2010
Messages : 14
Points : 1
Points : 1
Par défaut Fusionner deux fonctions en caml

Bonsoir ,

Je suis en train de faire un projet de compilation en utilisant Ocaml, et comme je ne suis pas familier avec ce langage , j'ai vraiment du mal à avancer.
Ma question est : comment fusionner deux fonctions en caml ?

Je m'explique :

La première fonction elle s'appelle : RTLabs.St_op2 : en gros elle effectue une opération binaire , elle additionne le contenu du registre srcr1 au contenu du registre srcr2 et stocke le resultat dans destr.

| RTLabs.St_op2 (op2, destr, srcr1, srcr2, lbl) ->
let v =
Eval.op2
(get_type lenv destr) (get_type lenv srcr1) (get_type lenv srcr2)
op2
(get_value lenv srcr1)
(get_value lenv srcr2) in
assign_state sfrs graph sp lbl lenv mem trace destr v


La deuxième fonction elle s'appelle : RTLabs.St_cst : celle là elle assigne une constante à un registre tout simplement.

| RTLabs.St_cst (destr, cst, lbl) ->
let v = Eval.cst mem sp (get_type lenv destr) cst in
assign_state sfrs graph sp lbl lenv mem trace destr v

Moi ce que je voudrais faire : programmer une fonction qui ajouteune constante cst au contenu du registre srcr et stocke le résultat dans le registre
dstr ;


Voilà ce que j'ai fait :

| RTLabs.St_cst (op2, destr, srcr1, src2, cst, lbl) ->
let x = RTLabs.St_cst (src1, cst, lbl) in

/* c'est là ou je bloque car je ne sais pas comment récupérer src1 !!!! */

Merci d'avance.
beautifulmind est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2012, 15h06   #2
SpiceGuid
Rédacteur
 
Avatar de SpiceGuid
 
Homme Damien Guichard
Inscription : juin 2007
Messages : 1 512
Détails du profil
Informations personnelles :
Nom : Homme Damien Guichard
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 1 512
Points : 2 495
Points : 2 495
Ça ressemble à une bête faute de frappe, le bon code serait :
Code :
1
2
| RTLabs.St_cst (op2, destr, src1, src2, cst, lbl) ->
Cependant il y a quand même un problème : tantôt tu utilises le constructeur RTLabs.St_cst avec 3 arguments, mais ici tu l'utilises avec 6 arguments
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo.
Avant de poser une question je lis les règles du forum.
SpiceGuid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2012, 16h14   #3
beautifulmind
Invité de passage
 
zvenden atchum
Inscription : juin 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : zvenden atchum

Informations forums :
Inscription : juin 2010
Messages : 14
Points : 1
Points : 1
Merci pour ta réponse ,
C'est vrais que j'ai fait qq fautes de frappes mais c'était pas ça ma question , je voulais savoir comment appeler une fonction au sein d'une autre
ça ressemble un peu à ça :

|RTLabs.St_addi (op2, destr, srcr1, srcr2, cst, lbl) ->
let ??? =
RTLabs.St_cst (src1, cst, lbl) in
let ??? =
RTLabs.St_op2 (op2, destr, src1, src2, lbl) in
assign_state sfrs graph sp lbl lenv mem trace destr ???

mais c'est pas exactement ça
beautifulmind est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2012, 16h47   #4
SpiceGuid
Rédacteur
 
Avatar de SpiceGuid
 
Homme Damien Guichard
Inscription : juin 2007
Messages : 1 512
Détails du profil
Informations personnelles :
Nom : Homme Damien Guichard
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 1 512
Points : 2 495
Points : 2 495
Tu ne peux pas 'récupérer' les valeurs de src1 et src2 si tu n'es pas dans une portée où elles ont été définies.

Dans ton exemple on est dans une portée où srcr1 et srcr2 ont été définies, mais pour src1 et src2 on ne sait pas.
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo.
Avant de poser une question je lis les règles du forum.
SpiceGuid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2012, 21h29   #5
beautifulmind
Invité de passage
 
zvenden atchum
Inscription : juin 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : zvenden atchum

Informations forums :
Inscription : juin 2010
Messages : 14
Points : 1
Points : 1
Sinon , est ce que tu sais comment récupérer la valeur d'un registre ?
beautifulmind est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h06.


 
 
 
 
Partenaires

Hébergement Web