Search code examples
prologgrammardcg

Parse Variables Using DCG


I am having trouble parsing sequences that begin with capital letters into variables using Prolog's DCG notation. For instance, if I have the string

f a X y Z X

and a DCG that parses this string, is there any way to parse each capitalized letter into a unique Prolog variable. E.g., parse Y to a variable and each X to a variable? The intended application would be to build the functor

T = f(a,X,y,Z,X)

via a DCG rule ending with the statement

{T =.. [Head|Args]}

Solution

  • Maybe you are looking for term_to_atom/3:

    ?- term_to_atom(Term, 'f(a,X,y,Z,X)').
    Term = f(a, _G304, y, _G306, _G304).