Ответ в теме: Занести в результирующий сначала элементы первого списка кроме каждого третьего

      Комментарии к записи Ответ в теме: Занести в результирующий сначала элементы первого списка кроме каждого третьего отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки Занести в результирующий сначала элементы первого списка кроме каждого третьего Ответ в теме: Занести в результирующий сначала элементы первого списка кроме каждого третьего

#2893

Поясните что должно случиться если во втором списке всего два элемента или, например пять элементов (меньше шести).

Схематично обработка должна выглядеть так:

list_processing(A, B, Result):-
  first_list_proc(A, AResult),
  second_list_proc(B, BResult),
  append(AResult, BResult, Result).

Выделение всех элементов, кроме каждого третьего на языке Prolog может быть записана следующим образом:

first_list_proc([], []).
first_list_proc([A], [A]).
first_list_proc([A, B], [A, B]).
first_list_proc([A, B, _C|Tail], [A, B|TailResult]):-
  first_list_proc(Tail, Tailresult).

В первых трех правилах предиката обрабатываются случаи, когда на вход подается пустой список или список из одного или двух элементов — при этом результатом должен являться исходный список.
В четвертом правиле записано, что если список состоит из трех и более элементов, то первые три элемента выбираются (A, B, _C), а остальные (Tail) обрабатываются рекурсивно. К полученному результату добавляются первые два элемента, а третий не используется (именно поэтому перед именем соответствующей переменной стоит символ подчеркивания).