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.