我正在尝试编写一个子句来检查传入其中的句子是否是(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
是正确的方法。