Per limitare questa generazione, si puo` tener conto della forma delle regole della grammatica.
Per esempio, se il sintagma nominale e` composto da un articolo seguito da un sostantivo, si puo` utilizzare questo fatto per limitare la ricerca solo alle possibili combinazioni di questi due simboli non terminali.
Possiamo allora ridefinire il predicato sn nel seguente modo:
sn(X,Y): e` vero se c'e` un sintagma nominale all'inizio della sequenza X, e la parte rimanente della sequenza dopo il sintagma nominale e` Y.
Dobbiamo allora riscrivere le regole della grammatica G1 tenendo conto di questo nuovo predicato, cioe`:
sn(X,Y) :- articolo(X,Z),sostantivo(Z,Y).
[il,gatto,mangia,il,topo] --------- X ------------------ ------------- Z --------- ------ Y -------Il procedimento di aggiunta di un argomento dovra` ovviamente essere esteso a tutti i predicati della grammatica. Essa diventa dunque:
proposizione(X,Y) :- sn(X,Z),sv(Z,Y). sn(X,Y) :- articolo(X,Z),sostantivo(Z,Y). sv(X,Y) :- verbo(X,Z),sn(Z,Y). articolo([il|Y],Y). sostantivo([gatto|Y],Y). sostantivo([topo|Y],Y). verbo([mangia|Y],Y).Il significato del fatto articolo([il|Y],Y) e` che e` possibile trovare un articolo all'inizio di una sequenza che inizia con la parola "il".
?- proposizione([il,gatto,mangia,il,topo],[]).Vedi esempio