Неопределенная процедура: (=) / 4 - PullRequest
0 голосов
/ 04 ноября 2018

Я хочу сравнить два термина в 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 голосов
/ 04 ноября 2018

В дополнение к тому, что сказал Пауло, я хотел бы отметить, что использование (=)/2 здесь не обязательно. В конце концов, если термины равны, вы можете просто использовать одну и ту же переменную для обозначения их обоих.

Итак, все ваше правило можно записать в виде:

np(np(DetBaum,NBaum), Morph) -->
        det(DetBaum, Morph),
        n(NBaum, Morph).
0 голосов
/ 04 ноября 2018

В грамматических правилах вызовы предикатов, такие как =/2, должны быть упакованы с использованием управляющей конструкции {}/1:

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

Это предотвращает компиляцию правила грамматики для интерпретации =/2 как нетерминального.

...