Aller au contenu
EN FR

Requêtes et quantificateurs

Statut documentaire : reference — voir Maturité et preuves.

Les requêtes H-Logic opèrent sur des structures conceptuelles plutôt que sur des tables de stockage. L’expression de requête dit ce qui est recherché ; l’expression return définit la projection du résultat.

Formes de requête

ask .:#A(x) and .:#R(x, y) return x;

? .:#Person(Tom)[name='Tom Hanks']
  and .:#like(Tom, Anne)
  return (Tom, Anne);

Les rôles libres de l’expression cible forment l’environnement de requête. Ne pas déclarer de liste de variables préfixées telle que ?x := ....

Quantificateurs

exists y:#B on .:#R(y);
every y:#B on .:#R(y);
any x:#A, exists y:#B on .:#Pair(x, y);

exists exige au moins une valeur correspondante. every contraint toutes les valeurs associées par la relation cible. any établit un domaine source pour le motif qui suit.

Une variable quantifiée peut porter une restriction de type ou une liaison d’égalité, mais la forme compacte combinée y:#A=&a n’est pas valide. Écrire explicitement la contrainte voulue.

Composition logique

Les motifs peuvent être composés avec and, or, des expressions arithmétiques et des opérateurs relationnels. Nommer une occurrence de relation permet à la requête de retourner ou contraindre le fait lui-même, pas uniquement ses participants.

Requête retournant une commande

Une requête peut retourner une commande conceptuelle :

ask .:#A(me, name, context) and (name='toto')
return do _:#love(me, #you, context);

Utiliser cette forme lorsque la condition gouvernée et l’opération conceptuelle qu’elle autorise doivent rester inspectables dans le même langage.