Пролог не возвращает все ответы - PullRequest
1 голос
/ 19 сентября 2019

Я только начинаю изучать Пролог и использую SWI-Пролог в Ubuntu.Я смотрю учебник YouTube по Прологу, где запрос возвращает (бесконечные) правильные ответы, но на моем компьютере тот же запрос возвращает только один, казалось бы, случайный ответ.


Код: vertical(line(point(X, Y), point(X, Y2))).

Запрос: vertical(line(point(5, 10), X)).

Ожидаемый учебный вывод: X = point(5, _ ).

Фактический вывод: X = point(5,6058).


Для точки X, чтобы быть вертикальным с (5,10), он должен иметь форму (5, _ ), но мой вывод (5,6058).Выходные данные также различаются для той же команды, когда я запускаю запрос второй раз, а затем он остается прежним.

1 Ответ

1 голос
/ 19 сентября 2019

Это является свободной переменной.Если мы запросим это, мы получим:

?- vertical(line(point(5, 10), X)).
X = point(5, <b>_3730</b>).

Обратите внимание на подчеркивание в _3730.Это означает, что это переменная.Если вы введете свободную переменную, интерпретатор Prolog добавит к этому число.Это полезно, если имеется несколько свободных переменных, поскольку в нем проясняется, какие переменные одинаковы, а какие переменные.

...