Прошу прощения, это, вероятно, было задано раньше, но я не могу найти хороший ответ.SWI-Prolog: как вставить новое предложение в базу данных
Я пишу назначение Пролога, в котором мы должны написать базу данных со вставкой, удалением и т. Д. Я сейчас застрял на части вставки. Я пытаюсь использовать tell, листинг и сказал для этого, но результаты часто непредсказуемы, удаляя случайные части файла. Вот полный код моей базы данных, banco.pl
:
:- dynamic progenitor/2.
progenitor(maria,joao).
progenitor(jose,joao).
progenitor(maria,ana).
progenitor(jose,ana).
insere(X,Y) :- dynamic progenitor/2, assert(progenitor(X,Y)).
tell('banco.pl'), listing(progenitor), told.
Я затем запустить следующее на SWI-Пролог:
insere(luiz,luiza).
И получаем следующий результат на banco.pl
:
:- dynamic progenitor/2.
progenitor(maria, joao).
progenitor(jose, joao).
progenitor(maria, ana).
progenitor(jose, ana).
Примечание что предложение, которое я пытался вставить, даже не в файле, и строки, определяющие commit и insere, отсутствуют.
Как бы это сделать правильно?
У вас есть опечатка в вашем определении предиката 'insere/2'. В конце первой строки определения предиката есть '.' (конец предложения) вместо', '(conj). –
Выражение 'dynamic progenitor/2' не входит в предложение предиката (' insere/2' в этом случае), так как это директива, и вы уже выпустили директиву в начале программы. Я удивлен, что вы не получили сообщение об ошибке. – lurker
Нужно ли использовать IO в стиле Эдинбург? –