Prolog 序言:检查句子是否以括号开头

Prolog 序言:检查句子是否以括号开头,prolog,Prolog,我试图写一个子句来检查传入它的句子是否是(a),这样如果我调用factor([(,a,)])。它会变成现实 当我有一个包含以下子句的数据库时 factor --> [(], [a], [)]. 我收到以下错误 ?- [db]. ERROR: /Direc/db.pl:2:2: Syntax error: Illegal start of term true. 我正在使用swi prolog您的尝试有几个问题 括号在Prolog中对于分组术语等有特殊的含义。因此

我试图写一个子句来检查传入它的句子是否是(a),这样如果我调用
factor([(,a,)])
。它会变成现实

当我有一个包含以下子句的数据库时

factor --> 
    [(],
    [a],
    [)].
我收到以下错误

?- [db].
ERROR: /Direc/db.pl:2:2: Syntax error: Illegal start of term
true.

我正在使用swi prolog

您的尝试有几个问题

括号在Prolog中对于分组术语等有特殊的含义。因此,如果您想将括号称为atom,则需要将其置于引号中

factor --> ['('], [a], [')'].
您可以将其写得更清楚,如下所示:

factor --> ['(', a, ')'].
调用
因子([(,a,)])
,或正确编写的
因子(['(',a,')))
不是调用DCG谓词的正确方法。定义DCG时,应使用
短语调用它:

phrase(factor, ['(', a, ')']).

如果上面正确定义了
系数//0
,则会成功。您可以将其称为
因子(['(',a'),[])。
但是使用
短语是正确的方法。

您的尝试中有几个问题

括号在Prolog中对于分组术语等有特殊的含义。因此,如果您想将括号称为atom,则需要将其置于引号中

factor --> ['('], [a], [')'].
您可以将其写得更清楚,如下所示:

factor --> ['(', a, ')'].
调用
因子([(,a,)])
,或正确编写的
因子(['(',a,')))
不是调用DCG谓词的正确方法。定义DCG时,应使用
短语调用它:

phrase(factor, ['(', a, ')']).

如果上面正确定义了
系数//0
,则会成功。你可以把它称为因子(['(',a'),[])。
但是使用
短语是正确的方法。

试着用引号括起来:
因子-->['('],[a],')。
然后你不调用
因子([(,a,))
你会使用
短语(factor,['(',a,)。).
试着把参数放在引号中:
因子-->['('],[a],')。
然后你不调用
因子([(,a,)])
你会使用
短语(因子,['(',a'))。