未定义的过程:(=)/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).
我想比较 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).