--- title: "Récupération de données" weight: 1 --- # Récupération de données Dans cette section sont décrites des techniques exploitant les mécanismes de la résolution stellaire afin de réaliser des opérations souhaitables pour un programmeur. ## Retour d'interaction Les rayons non polarisés ou *neutres* ne peuvent pas interagir mais se retrouvent en résultat de l'exécution. Il sont donc utilisés pour récupérer des informations sur le calcul effectué. On peut les utiliser pour suivre les interactions effectives avec des sortes de messages de debug. Par exemple, si on a cette constellation calculant pour quelles valeurs la formule `X /\ ~(Y \/ Z)` est vraie : ``` +not(0 1); +not(1 0); +and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); +or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); ' X /\ ~(Y \/ Z) @-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); ``` On pourrait ajouter un rayon neutre pour vérifier quel calcul a été effectué pour le connecteur `not` : ``` +not(0 1) debug(not(0 1)); +not(1 0) debug(not(1 0)); +and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); +or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); ' X /\ ~(Y \/ Z) @-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); ``` ## Redirection Il est aussi possible d'utiliser des rayons polarisés afin de déléguer le transfert de message à une autre constellation dédiée : ``` +not(0 1) +debug(0 1); +not(1 0) +debug(1 0); +and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); +or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); ' debug -debug(X R) debug(not(X R)); ' X /\ ~(Y \/ Z) @-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); ``` Cela permet en particulier un traitement générique. ## Langage naturel En utilisant des constantes, il est possible de mimer le langage naturel, chose très pratique pour l'affichage de résultats : ``` message(hello world); ``` Cette astuce utilise le fait que les constantes sont ordonnées lorsqu'elles sont en arguments d'un symbole de fonction. ## Interpolation de chaîne En rajoutant des variables, il est en fait possible d'afficher des messages génériques : ``` +not(0 1) +debug(0 1); +not(1 0) +debug(1 0); +and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); +or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); ' debug -debug(X R) debug(the result of not(X) is R); ' X /\ ~(Y \/ Z) @-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); ```