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

时间:2018-01-05 17:55:48

标签: prolog

我正在尝试编写一个子句来检查传入它的句子是否是(a),这样如果我调用factor([(,a,)])。它将返回true

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

factor --> 
    [(],
    [a],
    [)].

我收到以下错误

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

我正在使用swi-prolog

1 个答案:

答案 0 :(得分:2)

您的尝试存在一些问题。

括号在Prolog中具有特殊含义,用于对术语进行分组等。因此,如果要将括号称为原子,则需要将它们放在引号中。

factor --> ['('], [a], [')'].

你可以更清楚地写出:

factor --> ['(', a, ')'].

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

进行调用
phrase(factor, ['(', a, ')']).

通过上面factor//0的正确定义,哪个会成功。您可以将其称为factor(['(', a, ')'], []).,但使用phrase是正确的方法。