Bonjour
Ma question porte sur la modification d’une liste en cours d’exécution d’un programme.
Voici le contexte de cette problématique:
1) Je suis débutant en Haskell, que j'étudie pour le plaisir. J'ai commencé un petit programme de géométrie plane,
permettant d’afficher ( les figures sont exportées dans Gnu-TeXmacs ) des points, droites, cercles etc… Cela marche déjà assez bien.
Parmi les éléments de constructions les plus élémentaires, il y a les points:
Code haskell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Type Coord = ( Float, Float ) Data Object = Point { label :: String, coords :: Coord} | .... | ....
Les points sont donc donnés par leur coordonnées et un label ( qui peut être affiché ).
Object contient plusieurs autres objets géométriques pouvant être définis les uns à partir des autres par des étapes de construction successives.
2) Durant l’exécution du programme ( par ghci ) l’utilisateur peut être amené à introduire d’autres points,
- soit en directement, par exemple : pA = Point "A" (4,3) - soit en le définissant en tant qu’intersection ( droites , cercles ...) , ou par d'autres propriétés .
3) Tout point doit permettre de définir d’autres objets géométriques.
C’est pourquoi il serait souhaitable de connaitre à chaque étape la liste des points définis.
On peut poser par exemple par
Code haskell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 listpoints :: [ Object ] listpoints = [ ]
Pour la liste initiales des points.
Pour ajouter des éléments à cette, on peut faire une manip du genre :
Code haskell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2temp = listpoints listpoint = pA : temp
le problème est que j’aimerais que cette réactualisation de listpoint se fasse automatiquement lors de l’introduction
d’un nouveau points de construction ( telle que exposée en (2) ).
Avec Mathematica cela pourrait se faire ainsi :
Code haskell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 listpoint = {} defpoint[newpt_] := With[ {label = Input["nom du point"], coord = Input["label"]}, newpt = {label, coord}; listpoint = Prepend[listpoint, newpt] ]
mais un tel bricolage ne semble pas possible en programmation fonctionnelle !
Alors comment faire ? Avez-vous des idées ? Toute suggestion est bienvenue...
Partager