Когда вы пишете:
assert(happy(mia)).
вы (ре) определяете предикат assert/1
, а не , вызывающий это, как в вашем определении *Предикат 1009 *.Таким образом, happy(mia)
никогда не добавляется в базу данных .Запрос не выполняется, так как предикат happy/1
известен системе (благодаря директиве dynamic/1
), но не содержит предложений.
Большинство систем Prolog предотвращают переопределение стандартных встроенных предикатов.Но assert/1
является устаревшим / устаревшим предикатом.Это объясняет, почему SWI-Prolog не жалуется на переопределение.Всегда используйте стандартный предикат assertz/1
вместо assert/1
.