[OCaml] Pretty printer et fonctions mutuellements récursives
Résolu
Sauvegarde2
Messages postés
219
Statut
Membre
-
Sauvegarde2 Messages postés 219 Statut Membre -
Sauvegarde2 Messages postés 219 Statut Membre -
Bonjour,
je dois faire écrire un pretty-printer qui va imprimer du json mais je n'arrive pas à m'en sortir à cause de print_jvalue qui a besoin de print_jobject et vice & versa.
Je sais que la fonction ressemble à un gros tas mais ce sont les 'and' et les 'in' qui sont importants, je les aient mis en valeur.
Pouvez-vous m'aider ?
Le code :
je dois faire écrire un pretty-printer qui va imprimer du json mais je n'arrive pas à m'en sortir à cause de print_jvalue qui a besoin de print_jobject et vice & versa.
Je sais que la fonction ressemble à un gros tas mais ce sont les 'and' et les 'in' qui sont importants, je les aient mis en valeur.
Pouvez-vous m'aider ?
Le code :
let print_json json =
let rec print_jvalue v = match v with
| String_val s ->
print_char '"';
print_string s;
print_char '"'
| Number_val n -> print_float n
| Object_val o -> print_jobject o
| Array_val a -> print_jarray a
| Bool_val b -> print_bool b
| Null_val -> print_string "null" and
print_list o print_content = match o with
| t::[] ->
print_content t
| t::c ->
print_content t;
print_string ",\n";
print_list c print_content in
let inner_print o delimiters print_content =
print_char delimiters.[0];
print_string "\n\t";
print_list o print_content;
print_char delimiters.[1];
print_string "\n" in
let print_jobject o = inner_print o "{}" print_jvalue in
let print_jarray a = inner_print a "[]" print_jobject in
print_jobject json;;
A voir également:
- [OCaml] Pretty printer et fonctions mutuellements récursives
- Fonction si et - Guide
- Bullzip pdf printer - Télécharger - PDF
- Label printer logiciel - Télécharger - Outils professionnels
- Easy poster printer - Télécharger - Divers Photo & Graphisme
- Ronyasoft poster printer - Télécharger - Impression
1 réponse
Tu dois déclarer tes fonctions qui se croisent en même temps (au sein du même let)
Donc je n'ai pas pu vérifié puisqu'il me manque deux trois trucs (Number_val, etc.), mais de tête ça doit faire quelque chose comme ça :
Donc je n'ai pas pu vérifié puisqu'il me manque deux trois trucs (Number_val, etc.), mais de tête ça doit faire quelque chose comme ça :
let print_json json =
let rec print_list o print_content = match o with
| t::[] ->
print_content t
| t::c ->
print_content t;
print_string ",\n";
print_list c print_content in
let inner_print o delimiters print_content =
print_char delimiters.[0];
print_string "\n\t";
print_list o print_content;
print_char delimiters.[1];
print_string "\n" in
let rec print_jvalue v = match v with
| String_val s ->
print_char '"';
print_string s;
print_char '"'
| Number_val n -> print_float n
| Object_val o -> print_jobject o
| Array_val a -> print_jarray a
| Bool_val b -> print_bool b
| Null_val -> print_string "null"
and print_jobject o = inner_print o "{}" print_jvalue
and print_jarray a = inner_print a "[]" print_jobject in
print_jobject json;;La confiance n'exclut pas le contrôle
Merci :-)