Search code examples
prologdcgnlg

How can I generate some phrases from a knowledge base after DCG?


I have defined my grammar in prolog as DCG (Definite Clause Grammar). Now I want to generate some phrases according with the facts present in my knowledge base. For example, if I have likes(mark, julia). I want to generate the sentence

Mark likes Julia.

How can I do this?


Solution

  • We must take into account that likes/2 is a normal Prolog predicate, not a DCG.

    Hence, we use {}//1 to refer to regular Prolog predicates within DCGs.

    For example:

    sentence -->
            [X, likes, Y],
            { likes(X, Y) }.
    

    Sample usage:

    ?- phrase(sentence, Ls).
    Ls = [mark, likes, julia].