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



我正在尝试编写一个子句来检查传入其中的句子是否是(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, ')'].

调用factor([(,a,)])或正确编写factor(['(', a, ')'])不是调用 DCG 谓词的正确方法。定义 DCG 时,应使用 phrase 调用它:

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

这将成功与上述factor//0的正确定义。您可以将其称为factor(['(', a, ')'], []).但使用phrase是正确的方法。

最新更新