Prolog Language
Clauses définies de la clause (DCG)
Recherche…
Rien du tout: `// // 0`
L'un des non-terminaux DCG les plus élémentaires est ... //0
, qui peut être lu comme "n'importe quoi":
... --> [] | [_], ... .
Il peut être utilisé pour décrire une liste Ls
contenant l'élément E
via:
phrase(( ..., [E], ... ), Ls)
Analyse avec les DCG
Les DCG peuvent être utilisés pour l'analyse. Mieux encore, le même DCG peut souvent être utilisé pour analyser et générer des listes décrites. Par exemple:
sentence --> article, subject, verb, object.
article --> [the].
subject --> [woman] | [man].
verb --> [likes] | [enjoys].
object --> [apples] | [oranges].
Exemple de requêtes:
?- phrase(sentence, Ls).
Ls = [the, woman, likes, apples] ;
Ls = [the, woman, likes, oranges] ;
Ls = [the, woman, enjoys, apples] .
?- phrase(sentence, [the,man,likes,apples]).
true .
Objectifs supplémentaires
Des objectifs supplémentaires permettent d'ajouter du traitement aux clauses DCG, par exemple, les conditions que les éléments de la liste doivent satisfaire.
Les objectifs supplémentaires sont observés entre accolades à la fin d'une clause DCG.
% DCG clause requiring an integer
int --> [X], {integer(X)}.
Usage:
?- phrase(int, [3]).
true.
?- phrase(int, [a]).
false.
Arguments supplémentaires
Les arguments supplémentaires ajoutent des résultats aux prédicats d'une clause DCG, en décorant l'arbre de dérivation. Par exemple, il est possible de créer une grammaire algébrique qui calcule la valeur à la fin.
Étant donné une grammaire qui prend en charge l'ajout d'opération:
% Extra arguments are passed between parenthesis after the name of the DCG clauses.
exp(C) --> int(A), [+], exp(B), {plus(A, B, C)}.
exp(X) --> int(X).
int(X) --> [X], {integer(X)}.
Le résultat de cette grammaire peut être validé et interrogé:
?- phrase(exp(X), [1,+,2,+,3]).
X = 6 ;