Результат для оператора и предиката (Пролог) - PullRequest
0 голосов
/ 20 февраля 2020

Кто-то занят, и это определяется тем, работает ли кто-то на двух работах.

Учитывая следующие описания

employe(tom,shopify).
employe(eva,shopify).
employe(eva,ibm).
employe(sam,cisco).
employe(sam,bridehead).

Я хочу изменить следующий предикат, чтобы возвращать людей, которые работают два jobs.

occupe(X):- employe(X,C1), employe(X,C2).

Я не понимаю, почему Том дается в качестве возможного ответа, когда он работает только на одной работе (т.е. я не понимаю, как оператор and , не гарантирует, что сотрудник работает на двух разных работах).

Кроме того, я попытался добавить ! в начале, но это не сработало.

1 Ответ

3 голосов
/ 20 февраля 2020

Причина, по которой это работает, в том, что C1 и C2 сами по себе не отличаются. Таким образом, он объединяет C1 и C2 с shopify.

. Чтобы определить людей, работающих на двух разных работах, вы должны указать, что C1 и C2 должны быть разными:

occupe(X):- employe(X,C1), employe(X,C2), <b>C1 \= C2</b>.
...