Parse Variables Using DCG
Asked Answered
C

2

3

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]}
Calf answered 14/6, 2011 at 16:49 Comment(0)
C
3

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).
Coconut answered 14/6, 2011 at 21:2 Comment(1)
This is precisely the predicate I was looking for. Thanks.Calf
S
3

If you are using capital letters as an atom, you have to surround them between single quotes. E.g. 'X' and 'Z'.

Otherwise, they will be considered as prolog variables.

Shurwood answered 14/6, 2011 at 17:1 Comment(0)
C
3

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).
Coconut answered 14/6, 2011 at 21:2 Comment(1)
This is precisely the predicate I was looking for. Thanks.Calf

© 2022 - 2024 — McMap. All rights reserved.