Получить список, содержащий все элементы исходного списка, но по одному - Prolog
Формулировка задачи:
Здравствуйте!
Помогите, пожалуйста, с решением следующей задачи:
Получить список, содержащий все элементы исходного списка, но по одному.
Заранее спасибо!
Решение задачи: «Получить список, содержащий все элементы исходного списка, но по одному»
textual
Листинг программы
member(X, [X|_]):-!. member(X, [_|T]) :- member(X, T). newlist([], []). newlist([H|T], [H|N]) :- not(member(H,T)), newlist(T, N),!. newlist([_|T],N) :- newlist(T,N).
Объяснение кода листинга программы
member(X, [X|_]):-!- эта часть кода проверяет, является ли элемент X частью списка [X|_]. Если это так, то функция прекращает выполнение (выражение-!означаетостановить).- В приведённом выше примере это означает, что если X является первым элементом списка, то он считается
членомсписка.
- В приведённом выше примере это означает, что если X является первым элементом списка, то он считается
member(X, [_|T]) :- member(X, T).- эта часть кода проверяет, является ли элемент X частью списка [_|T]. Если это так, то он считаетсячленомсписка.- В приведённом выше примере это означает, что если X является любым элементом списка, кроме первого, то он считается
членомсписка.
- В приведённом выше примере это означает, что если X является любым элементом списка, кроме первого, то он считается
newlist([], []).- эта часть кода определяет пустой список как список, который не содержит ни одного элемента.newlist([H|T], [H|N]) :- not(member(H,T)), newlist(T, N),!.- эта часть кода проверяет, является ли первый элемент списка H частью списка T. Если это не так, то он добавляется в начало нового списка N, а функция рекурсивно вызывается для оставшейся части списка T.- В приведённом выше примере это означает, что если первый элемент списка не является
членомсписка, то он добавляется в начало нового списка.
- В приведённом выше примере это означает, что если первый элемент списка не является
newlist([_|T],N) :- newlist(T,N).- эта часть кода рекурсивно вызывает функцию newlist для оставшейся части списка T и нового списка N.- В приведённом выше примере это означает, что если первый элемент списка является
членомсписка, то функция рекурсивно вызывается для оставшейся части списка.
- В приведённом выше примере это означает, что если первый элемент списка является