Prolog 序言:检查句子是否以括号开头
我试图写一个子句来检查传入它的句子是否是(a),这样如果我调用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中对于分组术语等有特殊的含义。因此
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'))。