2.4 KiB
| title | weight |
|---|---|
| Récupération de données | 10 |
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);