3

我无法使用 Prolog 的 DCG 符号将大写字母开头的序列解析为变量。例如,如果我有字符串

f a X y Z X

和解析这个字符串的 DCG,有没有办法将每个大写字母解析成一个唯一的 Prolog 变量。例如,解析Y为一个变量,每个解析为X一个变量?预期的应用是构建函子

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

通过以语句结尾的 DCG 规则

{T =.. [Head|Args]}
4

2 回答 2

3

如果您使用大写字母作为原子,则必须将它们括在单引号之间。例如“X”和“Z”。

否则,它们将被视为序言变量。

于 2011-06-14T17:01:49.920 回答
3

也许您正在寻找term_to_atom/3

?- term_to_atom(Term, 'f(a,X,y,Z,X)').
Term = f(a, _G304, y, _G306, _G304).
于 2011-06-14T21:02:13.677 回答