Задачка про 2 списка со смещением и выводом списков - Prolog

Узнай цену своей работы

Формулировка задачи:

Доброго дня. Прошу помощи по задаче. SWI Prolog Построить произвольный список. Второй список построенный по следующему правилу: 1 элемент первого списка, 3 и 4 элемент 1 списка, 6,7,8 элемент первого списка и т.д. Последняя группа элементов второго списка может быть неполной.

Решение задачи: «Задачка про 2 списка со смещением и выводом списков»

textual
Листинг программы
seq_rule(Xs, Ys) :-
    seq_rule(Xs, Ys, 1, 1).
 
seq_rule([X, _ | Xs], [X | Ys], N, N) :-
    N1 is N + 1,
    !,
    seq_rule(Xs, Ys, 1, N1).
seq_rule([X | Xs], [X | Ys], C, N) :-
    C1 is C + 1,
    !,
    seq_rule(Xs, Ys, C1, N).
seq_rule(Xs, Xs, _, _).

Объяснение кода листинга программы

Код представляет собой реализацию функции seq_rule для работы с двумя списками Xs и Ys. Функция получает эти два списка в качестве входных параметров и возвращает список результатов. В первой строке кода функция объявлена как seq_rule(Xs, Ys). Второй и третий аргументы функции, Ys, используются для промежуточных результатов. Внутри функции seq_rule, если оба списка пусты, то возвращается пустой список. Если список Xs не пуст, то первый элемент списка Xs добавляется в начало списка Ys, а функция вызывается рекурсивно для оставшейся части списка Xs и списка Ys с обновленными значениями счетчика. Если список Ys не пуст, то первый элемент списка Ys добавляется в начало списка Xs, а функция вызывается рекурсивно для оставшейся части списка Xs и списка Ys с обновленными значениями счетчика. Следовательно, функция реализовывает правило, согласно которому каждый элемент списка Xs соответствует элементу списка Ys со сдвигом на один элемент вправо. Поэтому список элементов, которые обрабатывает функция, будет иметь следующий вид:

  1. Xs = [X, _ | Xs], Ys = [X | Ys]
  2. Xs = [X | Xs], Ys = [X | Ys]
  3. Xs = [X | Xs], Ys = [X | Ys] ... n. Xs = [], Ys = [] где X — произвольный элемент списка Xs, _ — произвольный элемент списка Xs (неизвестный), Ys — список, полученный путем добавления элемента X к каждому элементу списка Ys.

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы