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

时间:2018-11-03 21:07:28

标签: prolog dcg

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

2 个答案:

答案 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解释为非终结符。