我正在尝试编写一个子句来检查传入它的句子是否是(a),这样如果我调用factor([(,a,)])
。它将返回true
当我有一个包含以下子句的数据库时
factor -->
[(],
[a],
[)].
我收到以下错误
?- [db].
ERROR: /Direc/db.pl:2:2: Syntax error: Illegal start of term
true.
我正在使用swi-prolog
答案 0 :(得分:2)
您的尝试存在一些问题。
括号在Prolog中具有特殊含义,用于对术语进行分组等。因此,如果要将括号称为原子,则需要将它们放在引号中。
factor --> ['('], [a], [')'].
你可以更清楚地写出:
factor --> ['(', a, ')'].
调用factor([(,a,)])
或正确编写factor(['(', a, ')'])
不是调用DCG谓词的正确方法。定义DCG时,您应该使用phrase
:
phrase(factor, ['(', a, ')']).
通过上面factor//0
的正确定义,哪个会成功。您可以将其称为factor(['(', a, ')'], []).
,但使用phrase
是正确的方法。