Support de la circularité dans les listes et les espaces de noms

Registered by Luc Bruninx

Jusqu'à présent, les révisions expérimentales précédentes fuyaient la circularité.

Ainsi, il n'était pas possible d'ajouter une liste dans elle-même. Des routines comme la recherche d'éléments, la duplication et la comparaison d'éléments dans une liste circulaire était infinie (du moins jusqu'à ce que la pile soit remplie).

Et si nous utilisions la circularité. Ceci serait vu comme un changement de stratégie (comme dans le cas d'autres situations), il s'agirait d'adopter une stratégie optimiste.

Cette stratégie serait optimiste non dans le sens où on considérerait qu'il n'y aura pas du tout de circularité, mais bien que celle-ci puisse être possible et de mettre en oeuvre les moyens de contourner le problème.

Par exemple, si on teste l'équipollence entre deux listes circulaires, comme faire pour sortir de la boucle dès lors que tous les éléments ont été testé au moins une fois.

Déjà au départ, on sait que pour tester une équipollence, il faut que le test précédent soit terminé dans le même processus. On peut donc implémenter 2 listes au niveau du processus (Interpreter) que l'on rempli lorsqu'on commence à tester des éléments. Tant qu'on en teste de nouveau sans avoir terminé les tests précédent, on place les éléments conteneurs dans une liste (une par partie testée - dans (=? a b), il faut une liste pour les éléments de a et une autre liste pour les éléments de b).

Lors qu'un élément se trouve plus de 2 fois dans chaque liste (respectivement pour a et b), cela signifie qu'on a fait le tour, on peut passer au suivant s'il y en a un et restaurer la pile.

Ceci est un exemple, mais la méthode Node.createClone() est déjà failsafe pour la circularité. Il suffit d'appliquer cette stratégie partout.

Blueprint information

Status:
Complete
Approver:
Luc Bruninx
Priority:
Essential
Drafter:
Luc Bruninx
Direction:
Approved
Assignee:
Luc Bruninx
Definition:
Approved
Series goal:
Accepted for 1.0
Implementation:
Implemented
Milestone target:
None
Started by
Luc Bruninx
Completed by
Luc Bruninx

Related branches

Sprints

Whiteboard

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.