#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.