Как автоматизировать точку с запятой в Prolog

Я изучаю Prolog в классе, и мне показали способ автоматического нажатия клавиши с точкой с запятой, пока не будет больше решений. Я пробовал искать в Google, но получаю примеры с использованием findall, чего не было. Есть ли другие способы автоматического нажатия ; в оболочке Prolog?

Например, показать все решения без повторного нажатия ;.

X = one ;
X = two ;
X = three ;
X = four.

person Rowen McDaniel    schedule 08.03.2016    source источник
comment
Верхний уровень GNU Prolog позволяет это напрямую, нажав a вместо ;.   -  person false    schedule 08.03.2016


Ответы (1)


Простое решение с использованием member/2 в качестве примера - использовать предикат fail/0 после цели:

?- member(X, [1,2,3]), writeq(X), nl, fail.
1
2
3
false.
person Paulo Moura    schedule 08.03.2016
comment
Я должен был быть более ясным в своем посте, я хотел, чтобы все решения были сгенерированы путем вызова предиката number(X). У меня нет списка. - person Rowen McDaniel; 08.03.2016
comment
Что означают числа после member и number? - person Rowen McDaniel; 08.03.2016
comment
@RowenMcDaniel member/2 означает, что member - это функтор с двумя аргументами. Кроме того, решение Пауло работает даже в вашем случае. Надо просто все обдумать: my_predicate(X), writeq(X), nl. fail.. member(X, [1,2,3]) - это просто пример вызова предиката, который генерирует несколько решений для X. - person lurker; 08.03.2016