未定义的过程:(=)/4

Undefined procedure: (=)/4

我想比较 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 是两个术语,而不是四个。我错了吗?

在语法规则中,必须使用 {}/1 控制结构包装对谓词 =/2 的调用:

np(np(DetBaum, NBaum), Morph1) -->
    det(DetBaum, Morph1),
    n(NBaum, Morph2),
    {Morph1 = Morph2}. 

这会阻止编译语法规则将 =/2 解释为非终结符。

除了 Paulo 所说的,我想提一下,在这里使用 (=)/2 是没有必要的。毕竟,如果项相等,那么您可以简单地使用相同的变量来表示它们。

所以,你的整个规则可以写成:

np(np(DetBaum,NBaum), Morph) -->
        det(DetBaum, Morph),
        n(NBaum, Morph).