Ответ в теме: Линеаризация списка функций – SWI Prolog

      Комментарии к записи Ответ в теме: Линеаризация списка функций – SWI Prolog отключены
#1745

% если исходный список пустой, то результат - пустой список
rem_heads([], []):-!.
% из непустого списка отделяется первый элемент (H), остается хвост(T)
rem_heads([H|T], R):-
% если H - тоже список (вложенный) - то:
% от него отбрасывается первый элемент, остается HT
% рекурсивно обрабатывается HT
% рекурсивно обрабатывается T
% результаты соединяются
    is_list(H), !, H = [_|HT], rem_heads(HT, HTR), rem_heads(T, TR), R = [HTR|TR];
% если же H - не список - то первый элемент выкидывать не требуется
% поэтому просто рекурсивно обрабатываем T, получаем TR
% и для получения результата приделаем к этому TR наш H
    rem_heads(T, TR), R = [H|TR].