Получить все префиксы списка, в том числе [] в прологе - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в Прологе и хотел начать изучать функциональность [H | T], пытаясь написать префиксную функцию самостоятельно.Функция префикса возвращает все возможные префиксы в список, например, для L = [a, b, c] будут [], [a], [a, b] и [a, b, c].Я запутался в том, как моя собственная функция Пролог могла бы возвращать так много разных решений.У меня есть разделение заголовка и хвоста списка и добавление заголовка в мой новый список, который будет возвращать разные префиксы.Это то, что я имею до сих пор, но я думаю, что я упрощаю и не знаю, как еще рекурсивно назвать это, чтобы получить все различные возможности.

myPrefix([],[]). 

myPrefix([H|T],List) :- myPrefix(T, [H|List]).

Я просмотрел множество других ответов, но они просто касаются получения первого элемента из списка, а не перечисления всех возможных префиксов.Любой совет о том, как идти отсюда или более подробное объяснение того, как работает этот головной и хвостовой функционал манипулирования списком, приветствуется.

1 Ответ

0 голосов
/ 25 апреля 2018

Если предположить, что первый аргумент, если экземпляр создан, является правильным списком, то он должен это сделать:

myPrefix(_, []).
myPrefix([H|T], [H|NT]):-
  myPrefix(T, NT).

Первое предложение игнорирует первый аргумент и объединяет второй с пустым списком.

Второе предложение берет заголовок списка первого аргумента и помещает его в качестве заголовка второго аргумента и вызывает себя рекурсивно.

Таким образом, второе предложение берёт один за другим столько элементов, сколько нужно, ипервый пункт опускает хвост.

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