Update data structures
This commit is contained in:
parent
2b48ab39dd
commit
bc51c63f27
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: "Structures de données"
|
||||||
|
bookFlatSection: true
|
||||||
|
weight: 40
|
||||||
|
---
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
---
|
||||||
|
title: "Techniques d'encodage"
|
||||||
|
weight: 10
|
||||||
|
---
|
||||||
|
|
||||||
|
# Techniques d'encodage
|
||||||
|
|
||||||
|
Il existe deux manières d'encoder des structures de données.
|
||||||
|
|
||||||
|
## Encodage algébrique
|
||||||
|
|
||||||
|
On peut encoder des structures de données directement dans les rayons comme
|
||||||
|
on le ferait en programmation fonctionnelle.
|
||||||
|
|
||||||
|
Dans ce cas-là, les structures de données sont vues comme des objets statiques
|
||||||
|
qu'on évalue. Cela nous donne principalement des structures d'arbres et
|
||||||
|
d'ensembles.
|
||||||
|
|
||||||
|
Par exemple :
|
||||||
|
|
||||||
|
```
|
||||||
|
'unary integer
|
||||||
|
+nat(s(s(s(0))));
|
||||||
|
|
||||||
|
'pair
|
||||||
|
+pair(a b);
|
||||||
|
|
||||||
|
'list
|
||||||
|
+list(0 1 0);
|
||||||
|
+list(0:1:0:e);
|
||||||
|
+list(0(1(0(e))));
|
||||||
|
+cons(0, +cons(1, +cons(0, e)));
|
||||||
|
|
||||||
|
'tree
|
||||||
|
-and(-or(X Y) -not(Y));
|
||||||
|
|
||||||
|
'set
|
||||||
|
+a +b +c +d +e; 'dependent
|
||||||
|
+a; +b; +c; +d; +e; 'independent
|
||||||
|
+list(0(1(e))) +nat(s(s(0))) +cons(0, +cons(1, e));
|
||||||
|
|
||||||
|
'graph
|
||||||
|
+e(1 2); +e(2 3); +e(1 4);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Encodage interactif
|
||||||
|
|
||||||
|
On peut aussi encoder une structure en jouant sur la compatibilité entre les
|
||||||
|
rayons. Ainsi, la géométrie de la structure est reflétée par les dépendances
|
||||||
|
entre les rayons.
|
||||||
|
|
||||||
|
Une liste prendrait la forme d'étoiles qui peuvent s'enchaîner durant
|
||||||
|
l'exécution. Un arbre serait un ensemble d'étoiles dont les dépendances forment
|
||||||
|
une arborescence.
|
||||||
|
|
||||||
|
Dans ce cas, on encode les structures de données par des sortes d'hypergraphes
|
||||||
|
interactifs.
|
||||||
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
title: "Exercices"
|
||||||
|
weight: 50
|
||||||
|
---
|
||||||
|
|
||||||
|
# Exercices
|
||||||
|
|
||||||
|
## Bases de connaissance et requêtes
|
||||||
|
|
||||||
|
## Relations
|
||||||
|
|
||||||
|
## Parcours de graphes
|
||||||
|
|
||||||
|
### Parcours évaluatif
|
||||||
|
|
||||||
|
### Parcours performatif
|
||||||
|
|
||||||
|
## Opérations sur listes
|
||||||
|
|
||||||
|
## Conversions d'entiers
|
||||||
|
|
||||||
|
### Décimal vers unaire
|
||||||
|
|
||||||
|
### Unaire vers décimal
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: "Hypergraphes"
|
||||||
|
weight: 40
|
||||||
|
---
|
||||||
|
|
||||||
|
(Soon)
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
---
|
||||||
|
title: "Listes"
|
||||||
|
weight: 20
|
||||||
|
---
|
||||||
|
|
||||||
|
# Listes algébriques
|
||||||
|
|
||||||
|
## Séquences fixes
|
||||||
|
|
||||||
|
```
|
||||||
|
+list(a b c d);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pile de constantes
|
||||||
|
|
||||||
|
```
|
||||||
|
+list(a(b(c(d(e)))));
|
||||||
|
```
|
||||||
|
|
||||||
|
## Listes générales
|
||||||
|
|
||||||
|
Si on souhaite lister des rayons arbitraires alors on peut utiliser n'importe
|
||||||
|
quel symbole de fonction binaire et notamment le symbole spécial `:` qui
|
||||||
|
correspond à un symbole binaire `:(_, _)` en interne (associatif à droite) :
|
||||||
|
|
||||||
|
```
|
||||||
|
+list(a:b:c:d:e);
|
||||||
|
+list(cons(a, cons(b, cons(c, cons(d, e)))));
|
||||||
|
```
|
||||||
|
|
||||||
|
On peut aussi opter pour une représentation avec polarités internes :
|
||||||
|
|
||||||
|
```
|
||||||
|
+cons(a, +cons(b, +cons(c, +cons(d, e))));
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quelques opérations sur les listes générales
|
||||||
|
|
||||||
|
### Test liste vide
|
||||||
|
|
||||||
|
```
|
||||||
|
+empty(e);
|
||||||
|
|
||||||
|
@-empty(e) ok;
|
||||||
|
@-empty(1:e) ok;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Concaténation
|
||||||
|
|
||||||
|
```
|
||||||
|
+append(e L L);
|
||||||
|
-append(T L R) +append(H:T L H:R);
|
||||||
|
|
||||||
|
@-append(a:b:e c:d:e R) R;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Inverse d'une liste
|
||||||
|
|
||||||
|
```
|
||||||
|
+rev_acc(e ACC ACC);
|
||||||
|
-rev_acc(T H:ACC R) +rev_acc(H:T ACC R);
|
||||||
|
-rev_acc(L e R) +rev(L R);
|
||||||
|
|
||||||
|
@-rev(a:b:c:d:e R) R;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Map
|
||||||
|
|
||||||
|
```
|
||||||
|
+funcall(f X f(X));
|
||||||
|
|
||||||
|
+map(X e e);
|
||||||
|
-funcall(F H FH) -map(F T R) +map(F H:T FH:R);
|
||||||
|
|
||||||
|
@-map(f a:b:c:d:e R) R;
|
||||||
|
```
|
||||||
|
|
||||||
|
# Listes interactives
|
||||||
|
|
||||||
|
Une liste interactive est définie par un enchaînement d'étoiles. On ne
|
||||||
|
représente plus la liste mais le processus de création de liste :
|
||||||
|
|
||||||
|
```
|
||||||
|
+l(0 a:X) -l(1 X);
|
||||||
|
+l(1 b:X) -l(2 X);
|
||||||
|
+l(2 c:X) -l(3 X);
|
||||||
|
+l(3 d:X) -l(4 X);
|
||||||
|
+l(4 e);
|
||||||
|
|
||||||
|
@-l(0 X) X;
|
||||||
|
```
|
||||||
|
|
||||||
|
En remplaçant le `0` de `@-l(0 X) X`, cela nous permet de demander la liste à
|
||||||
|
partir d'un certain indice :
|
||||||
|
|
||||||
|
```
|
||||||
|
+l(0 a:X) -l(1 X);
|
||||||
|
+l(1 b:X) -l(2 X);
|
||||||
|
+l(2 c:X) -l(3 X);
|
||||||
|
+l(3 d:X) -l(4 X);
|
||||||
|
+l(4 e);
|
||||||
|
|
||||||
|
@-l(2 X) X;
|
||||||
|
```
|
||||||
|
|
||||||
|
On peut aussi imaginer des variantes de représentations qui permettent d'agir
|
||||||
|
sur les éléments de la liste. On peut aussi imaginer jouer avec des boucles
|
||||||
|
pour former des listes circulaires ou alors générer une liste automatiquement.
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: "Arbres"
|
||||||
|
weight: 30
|
||||||
|
---
|
||||||
|
|
||||||
|
(Soon)
|
||||||
Loading…
Reference in New Issue