GNUProlog возвращает только одно из значений для запроса - PullRequest
2 голосов
/ 06 декабря 2011
% facts
mother(john, dana).
father(john, david).
mother(chelsea, dana).
father(chelsea, david).
mother(jared, dana).
father(jared, david).
% queries
parent(X,Y) :- father(X,Y);mother(X,Y).

Когда я набираю «parent (john, X).», Я получаю X = дана, но не X == Дэвид.Однако, на мой предыдущий вопрос , человек, который ответил мне, похоже, получил обоих родителей.Это ограничение gprolog или я все еще делаю что-то не так?

Ответы [ 2 ]

5 голосов
/ 06 декабря 2011

Чтобы получить все результаты, нужно нажать клавишу с запятой ;, один раз для каждого решения.

Если вы хотите получить все результаты в виде списка, вы можете попробовать

?- findall(X, parent(john, X), L).

L = [david,dana]
2 голосов
/ 07 декабря 2011

В интерактивном цикле ответа на запросы верхнего уровня вы получаете следующее решение, набрав точку с запятой ";".

Ваш пример отлично работает в GNU Prolog:

GNU Prolog 1.4.0
By Daniel Diaz
Copyright (C) 1999-2011 Daniel Diaz
| ?- [user].
compiling user for byte code...
mother(john, dana).
father(john, david).
parent(X,Y) :- father(X,Y);mother(X,Y).

user compiled, 4 lines read - 725 bytes written, 33109 ms

(2 ms) yes
| ?- parent(john,X).

X = david ? ;

X = dana

yes

Bye

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