Vediamo ora come sviluppare un programma Prolog per verificare se una sequenza di parole e` una frase per il linguaggio definito dalla grammatica G1 definita in precedenza. Definiamo a tale scopo i seguenti predicati:
proposizione(X): e` vero se X e` una frase grammaticalmente corretta per il linguaggio definito da G1;
sn(X): e` vero se X e` un sintagma nominale;
sv(X): e` vero se X e` un sintagma verbale.
Analizzando la grammatica G1 risulta che una frase X e` una proposizione corretta per il nostro linguaggio se puo` essere scomposta in due componenti Y e Z, tali che Y e` un sintagma nominale e Z e` un sintagma verbale.
Pensando di rappresentare le frasi del nostro linguaggio come liste Prolog e supponendo di avere a disposizione un predicato append che concatena due liste in una terza lista, cosi` definito:
append([],Lista,Lista). append([T|Lista1],Lista2,[T|Lista3]) :- append(Lista1,Lista2,Lista3).A questo punto possiamo verificare se una proposizione e` una frase del nostro linguaggio ponendo la domanda:
possiamo scrivere:
proposizione(X) :- append(Y,Z,X),sn(Y),sv(Z).
Estendendo lo stesso ragionamento a tutta la grammatica, abbiamo: sn(X) :- append(Y,Z,X),articolo(Y),sostantivo(Z). sv(X) :- append(Y,Z,X),verbo(Y),sn(Z).
Possiamo infine tener conto dei simboli terminali introducendo i fatti:
articolo([il]). sostantivo([gatto]). sostantivo([topo]). verbo([mangia]).
?- proposizione([il,gatto,mangia,il,topo]).Vedi esempio. Cerchiamo ora di capire cosa succede dopo aver posto tale domanda.