Пролог: найти что-то, на что нет ссылок в другом предикате - PullRequest
3 голосов
/ 13 января 2020

Предположим, у меня есть дБ

p1(red). 
p1(green).

p2(green).

Как мне найти все вещи, которые находятся в p1, но не в p2 (ie. Red)

1 Ответ

3 голосов
/ 13 января 2020

Как мне найти все вещи, которые есть в p1, но не в p2 (ie. Red)

В этом конкретном простом случае достаточно спросить:

?- p1(X), \+ p2(X).
   X = red
;  false.

Однако эта схема не может быть легко расширена для более сложных программ. Многие семантические c проблемы должны быть решены. Как ...

... немонотонность. При добавлении факта p2(red) запрос не будет выполнен. Так что эта программа по своей сути немонотонная c.

... недостаточная реализация. Это происходит, когда термины являются более сложными и не основаны.

... несоответствие. Это происходит, когда вы хотите одновременно использовать ограничения, такие как CLP (FD), в вашей программе. Неожиданный сбой \+ p2(X) может быть следствием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...