Я начал использовать Prolog, и у меня возникла эта проблема с динамическим предикатом - я не получаю правильный результат.Динамический предикат в Prolog
Это моя база данных:
:- dynamic mother/2.
mother(X,Y).
grandemother(X,Y) :-
mother(X,A),
mother(A,Y).
Вот некоторые из результатов, которые я получаю:
1 ?- assert(mother(alice,lise)).
true.
2 ?- assert(mother(lise,kate)).
true.
3 ?- grandemother(alice,X). % should only give X = kate.
true ;
X = lise ;
X = kate ;
true ;
X = kate.
4 ?- grandemother(alice,lise). % should only give false.
true ;
true ;
true ;
false.
5 ?- grandemother(X,kate). % should only give X = alice.
true ;
true ;
X = alice ;
X = alice ;
X = lise.
Я действительно не знаю, где эта проблема стоит, какие идеи?
Какова цель «матери (X, Y) .'? Это означает, что 'X' является матерью' Y' независимо от того, что 'X' и' Y', поскольку они являются переменными. – lurker
Я знаю, что могу просто поместить их в качестве фактов «мать (Алиса, Лиза)», .. и т. Д., Но я хотел создать экземпляр с использованием предиката assert. – StamDad
Я имею в виду буквально «мать (X, Y).», Строка сразу после вашего «динамического/1» вызова. Это «факт», в котором говорится, что кто-то является матерью кого-либо еще. – lurker