Bonjour,
J'ai beaucoup de mal à implémenter les structures de données que je souhaite en java. Je ne sais pas si le problème vient de moi où du langage, mais je me sens beaucoup plus à l'aise dans d'autres langages.
Ma structure de donnée est celle-là (en Caml / F#) :
En clair, c'est un arbre binaire où les nœuds sont des fonctions (à 2 arguments) et les feuilles des valeurs. Je souhaite que mon type reste générique, de sorte que les feuilles puissent être des entiers, des flottants, des strings ou autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type 'a ast = | Op of ('a -> 'a -> 'a) * 'a ast * 'a ast | Val of 'a
Par la suite, je souhaite pouvoir évaluer l'arbre. Code en ml/F# :
Et pour tester, j'aimerais pouvoir entrer en arbre en dur, de façon assez claire et lisible. J'avais écrit ça en Caml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 let rec eval = function | Op (f, x, y) -> f (eval x) (eval y) | Val n -> n
Bien sûr, j'ai cherché sur google et lu la faq. J'ai quand même plusieurs questions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 let make v1 f v2 = Op (f, v1, v2) and (!) n = Val n let my_ast = make (make !3 (+) !2) (-) (make !40 (/) !10)
. quelle est la solution la plus simple pour modéliser l'arbre ? De ce que j'ai lu, il faudrait faire une classe abstraite et deux classes qui en héritent.
. a priori, je devrais utiliser une interface pour les fonctions de l'arbre (pour remplacer les pointeurs sur fonction). C'est bien ça ? Et c'est possible de faire ça en mélangeant avec les generics ? (j'avoue que je ne vois pas trop comment faire)
. enfin, je dois vraiment créer un objet pour chaque fonction que je veux ajouter ? Je trouve ça excessivement lourd, surtout quand c'est une simple addition ou une soustraction.
Question subsidiaire : vous pensez que c'est possible de convertir mes 10 lignes de ml en moins de 50 lignes de java ?![]()
Par avance, merci de vos réponses.
Partager