перемещение по списку

#prolog

#пролог

Вопрос:

Учусь этому очень медленно… сегодня получил несколько книг, и они просто отстой..

итак .. я пытаюсь переместить X позицию по списку.. затем верните оставшуюся часть списка. Проблема в том, что я возвращаю просто элемент в этой позиции, а не список. Я полагаю, что моя проблема заключается либо в базовом варианте, либо в неизвестной переменной. Я также не уверен на 100%, когда следует использовать «_»..

объяснение было бы чрезвычайно полезным.. заранее благодарю.

 move([X|_],0,X).
move([X|XS],K,L) :- K>0,
    K1 is K-1, move(XS,K1,L).
  

Комментарии:

1. Я нахожу, что «переместить» — довольно вводящее в заблуждение название для этой операции. Я бы назвал это, например, get_tail/3.

2. @Kaarel: идиоматическое название этого предиката nth_tail .

Ответ №1:

Базовый вариант должен быть move(X,0,X) .

move([X|_],0,X) приведет к объединению X с единственным элементом во главе списка.

Комментарии:

1. итак, «_» означает, что хвост присутствует.. но не используется? Таким образом, использование термина X, который представляет собой весь список без разделения на начало и конец?

2. точно — X сам по себе не делает никаких заявлений о том, с чем он будет сопоставляться, и поэтому будет объединен со всем списком. [X|_] Шаблон разрушит структуру списка и приведет к объединению X с head.