[OCaml] Pretty printer et fonctions mutuellements récursives
Résolu
Sauvegarde2
Messages postés
205
Date d'inscription
Statut
Membre
Dernière intervention
-
Sauvegarde2 Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
Sauvegarde2 Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
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 :-)