我想比较SWI-Prolog中的两个术语:
np(np(DetBaum,NBaum),Morph1)->det(DetBaum,Morph1),n(NBaum,Morph2),Morph1=Morph2.
我收到以下错误消息:
ERROR: Undefined procedure: (=)/4
ERROR: However, there are definitions for:
ERROR: (=)/2
我认为Morph1和Morph2是两个术语,而不是四个。我错了吗?
答案 0 :(得分:5)
除了Paulo所说的以外,我还要提到这里没有必要使用(=)/2
。毕竟,如果两个术语相等,那么您可以简单地使用相同的变量来表示它们。
因此,您的整个规则可以写为:
np(np(DetBaum,NBaum), Morph) --> det(DetBaum, Morph), n(NBaum, Morph).
答案 1 :(得分:4)
在语法规则中,必须使用=/2
控制结构包装对谓词的调用,例如{}/1
:
np(np(DetBaum, NBaum), Morph1) -->
det(DetBaum, Morph1),
n(NBaum, Morph2),
{Morph1 = Morph2}.
这可防止编译语法规则以将=/2
解释为非终结符。