Я застрял на простой проблеме в прологе.
Давайте рассмотрим программу
worker(bill).
worker(smitt).
worker(fred).
worker(dany).
worker(john).
car(bmw).
car(mazda).
car(audi).
owner(fred,mazda).
owner(dany,bmw).
owner(john,audi).
Мне нужно добавить еще один предикат no_car (X), который будет истинным, если у рабочего X нет машин, т.е. если мы введем запрос
?: - no_car (X).
Пролог должен ответить
X=smitt,
X=bill,
yes
То, что я сделал, это
hascar(X):-owner(X,_).
nocar(X):- worker(X),not hascar(X).
Но этот подход не работает, потому что анонимные переменные доступны только для запросов.
Итак, я действительно застрял на этом.
Я знаю, что в SQL есть слова «НЕ СУЩЕСТВУЕТ», которые позволяют выразить эту логику в запросе, но есть ли что-то похожее на них в прологе?