89 lines
2.4 KiB
Markdown
89 lines
2.4 KiB
Markdown
---
|
|
title: "Récupération de données"
|
|
weight: 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);
|
|
``` |