Bonsoir,
Disons que j'ai un vecteur non mutable d'objets contenant pas mal de propriétés.
Je dois parcourir consécutivement cette liste d'objets, et faire des traitements en fonction de la suite d'objets de ce vecteur.
Le résultat de ces traitement produit un unique objet résultat, qui va éventuellement être "augmenté" lors du parcours de chaque objet.
En parallèle de la mise à jour de cet objet, des variables d'état du traitement, extérieures au vecteur d'entrée et à l'objet résultat, seront mises à jour par la consultation des objets et le traitement en question.
Ce traitement n'est pas du tout parallélisable, car les traitements pour un objets donné dépendront de la valeur des objets qui le précèdent (pas de tous, mais des quelques précédents).
C'est donc plus ou moins équivalent à une fonction du type (c'est conceptuel, à la louche) :
Un bête codage impératif m'amènerait à un complexe arbre de décision (pas tant lié au nombre d'objets qu'aux nombreuses propriétés de chacun), avec des if/else en pagaille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Result maFonction(const std::vector<Objet>& sequence) { Result r; int a, b, c, d; // variables d'état const Objet* previousElem = nullptr; for (const auto& elem : sequence) { // lecture de certaines données de elem // énorme quantité de if/else, avec : // - utilisation de previousElem // - utilisation des états // - mise à jour des états // - mise à jour de r objet = &elem; } return r; }
Il me faut donc sortir des paradigmes habituels, dont on a tous une vague connaissance, mais qu'on a peu souvent exploré : programmation logique (Haskell ?), détournement d'une machine à états...
Les traitements sont algorithmiquement primitifs, et la complexité se résume en fait à ces if/else, qu'on peut voir comme des règles. Idéalement, il serait apprécié qu'elles puissent être définies dans un fichier externe, et dans un langage simple.
Qu'auriez-vous à me suggérer ?
Il n'est pas du tout sûr que le C++ soit le langage le plus à même de répondre à mon besoin (malheureusement).
Partager