DCG in PROLOG pt. limba engleza

Mai jos gasiti exemplul in Turbo PROLOG pentru o gramatica a limbii engleze, cu acorduri corespunzatoare (persoana, numar, caz).

domains
    lista=string*
predicates
    str2list(string,lista)
    propoz(string)
    gn(string,symbol,symbol)
    gv(string,symbol)
    pron(string,symbol,symbol)
    art(string,symbol)
    subst(string,symbol,symbol)
    substa(string,symbol,symbol)
    num(string,symbol)
    verb(string,symbol)
    adj(string)
clauses
    str2list("",[]) if !.
    str2list(S,[H|T]) if fronttoken(S,H,R), str2list(R,T).
    propoz(P) if gn(GN,nominativ,sg), gv(GV,pers3sg), concat(GN," ",X), concat(X,GV,P).
    propoz(P) if gn(GN,nominativ,pl), gv(GV,general), concat(GN," ",X), concat(X,GV,P). 
    gn(G,Caz,Nr) if pron(G,Caz,Nr).
    gn(G,Caz,Nr) if art(A,Nr), subst(S,Caz,Nr), concat(A," ",X), concat(X,S,G).
    gn(G,Caz,Nr) if num(N,Nr), subst(S,Caz,Nr), concat(N," ",X), concat(X,S,G).
    gv(G,Pers) if verb(G,Pers).
    gv(G,Pers) if verb(V,Pers), gn(GN,acuzativ,_), concat(V," ",X), concat(X,GN,G).
    substa(S,Caz,Nr) if adj(A), subst(S1,Caz,Nr), concat(A," ",X), concat(X,S1,S).
    subst("woman",nominativ,sg). subst("woman",acuzativ,sg).
    subst("man",nominativ,sg). subst("man",acuzativ,sg).
    subst("women",nominativ,pl). subst("women",acuzativ,pl).
    subst("men",nominativ,pl). subst("men",acuzativ,pl).
    pron("he",nominativ,sg). pron("she",nominativ,sg).
    pron("him",acuzativ,sg). pron("her",acuzativ,sg).
    pron("we",nominativ,pl). pron("us",acuzativ,pl).
    art("a",sg). art("the",sg). art("the",pl).
    num("one",sg). num("two",pl).
    verb("love",general). verb("loves",pers3sg).
    adj("beautiful"). adj("smart").
goal
    propoz(X), write(X), nl, readln(_), fail

Publicat

în

de către

Etichete: