2013-07-13 4 views
1

Я хочу вернуть первый элемент списка каждый раз, когда пользователь запрашивает другое значение, т.е. List = [1, 2, 3], когда программа выполняется, она возвращает 1, однако при нажатии ; (пользователь запрашивает другую значение), то возвращается 2 и т. д., пока список не станет пустым.Возврат главы списка рекурсивно пролог

Хотя мне удалось сразу перечислить все значения, но ключевым вопросом здесь является то, что, как я могу подождать и позволить пользователю решить, хочет ли он другое значение или нет.

ответ

2

Просто сделай это:

member(X, List). 

Это перечисление следующего члена List на каждом ;. Каждый вызов предиката будет создавать следующий член List в X, пока все члены не будут исчерпаны.

1

Да, есть встроенная функция, которая делает это, но я думаю, вы должны попытаться написать ее сами, чтобы лучше понять Prolog.

each_one([A|_],A). 

Одним из элементов списка является его элемент головы.

each_one([_|B],X):- each_one(B,X). 

Другие элементы находятся в хвосте списка. Это рекурсивная статья.

В пустом списке нет элементов, поэтому мы ничего не пишем (хотя мы могли бы написать each_one([],_):- fail. с тем же эффектом).

Теперь вы можете попробовать:

4 ?- each_one([1,2,3],X). 
X = 1 

Пролог показывает первое решение и ждет вашего ответа. Вы нажимаете ';' для продолжения:

 ; 
X = 2 ; 
X = 3 ; 
false. 
Смежные вопросы