Пролог: Как проверить, существует ли элемент в базе данных перед добавлением? - PullRequest
3 голосов
/ 26 марта 2011

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

person(John,male)
person(Veronica,female)
person(Jessica,female)

Я добавляю записи, подобные этой:

add_person(N,G):-asserta(person(N,G)).

Howerver, я не хочу добавлять одного и того же человека дважды, поэтому мне нужно проверить перед добавлением.

Я пытаюсь сделать это так:

add_person(N,G):- \+ person(N,G),asserta(person(N,G)).

Проблема в том, что я не могу запросить базу данных, скажем person(John,male), если моя база данных пуста. Так что person(N,G) завершается с ошибкой существования, и я не могу добавить вообще.

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 27 марта 2011

То, как вы пишете John - это переменная, а не атом.Вы должны использовать только строчные буквы для атомов (john, veronica и т. Д.).Я только что попробовал ваш код, и он отлично работает:

person(john, male).

add_person(N,G):-
    \+ person(N,G),
    asserta(person(N,G)).

Добавление john снова не удается и возвращает false.

2 голосов
/ 27 марта 2011

Я не уверен, какой вариант Prolog вы используете, но вы можете объявить некоторые предикаты динамическими, поместив эту строку в верхней части вашего кода:

:- dynamic person/2.

Это описанов документации SWI-Prolog .

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