2 votes

Une multiméthode clojure auto-récursive est-elle une bonne conception pour un problème de classification imbriqué ?

J'ai une grande séquence de cartes de données et chaque carte doit être classée de manière imbriquée.

C'est-à-dire qu'un élément donné peut être un A ou un B (déterminé par une fonction), s'il est un B, il peut être un C ou un D (déterminé par une autre fonction) et ainsi de suite. À chaque étape, des données supplémentaires relatives à la classification peuvent être ajoutées à chaque carte. Les fonctions permettant d'effectuer la classification sont elles-mêmes assez complexes et peuvent nécessiter l'apport de données supplémentaires pour effectuer les déterminations.

Une multiméthode autorécursive serait-elle un bon moyen de structurer le code pour ce faire ? J'enverrais un message au type le plus spécifique déterminé jusqu'à présent pour un élément, ou je renverrais la meilleure classification actuelle lorsque rien d'autre ne peut être fait.

I pourrait obtenir l'effet désiré avec des ifs imbriqués à l'intérieur d'une seule fonction de classification, mais c'est vraiment moche.

Est-ce qu'une multiméthode convient ici ou est-ce que je complique trop les choses et que je ne vois pas une façon plus simple de structurer le code ?

1voto

Alex Miller Points 28225

Il semble que les multiméthodes pourraient être utiles ici. Je suppose que toute la complexité se trouve dans la fonction de distribution ? Donc, une fois que vous avez classifié le niveau supérieur, vous déclenchez à nouveau la multiméthode avec plus d'informations qui déclenchent une instance différente ?

Une autre façon de voir les choses est de se baser sur la traversée de l'arbre de décision au lieu de la traversée de votre entrée. Je me demande si l'utilisation de clojure.zip pour traverser un arbre de fonctions de classification pourrait être une solution intéressante. Votre fonction de classification à chaque nœud pourrait vous dire comment traverser l'arbre (vers quel enfant aller). Vous n'auriez pas nécessairement besoin de clojure.zip, mais la navigation dans l'arbre y est déjà intégrée.

0voto

Arthur Ulfeldt Points 45059

Les multiméthodes sont excellentes car elles permettent ce niveau de répartition lorsque la complexité du problème l'exige. Allez-y, si c'est ce que vous voulez.

Vous pourriez peut-être construire un isa hiérarchie pour aider

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X