Уменьшить каждое 2 значение списка на 1 и удалить конец списка после заданного элемента - Prolog
Формулировка задачи:
Уменьшить каждое 2 значение списка на 1 и удалить конец списка после заданного элемента X.
Написал формирование списка (работает) и попытался увеличить каждый элемент списка.
Программа ошибок не выдаёт, но и результат неправильный.
Результат:
Листинг программы
- /*Создание и вывод списка из 8 элементов (2,4,6,8,10,12,14,16)*/
- genl(N2,N2,[]):-!.
- genl(N1,N2,[N1|L]):- N1 < N2, N is N1+2, genl(N,N2,L).
- create :- N is 9, K is 2*(N+1)-2, genl(2,K,L), write('List: '), write(L).
- /*Вставка в новый список*/
- add([H|T], X, [H|R]) :- add(T, X, R).
- add([], X, X).
- /*Уменьшение на 1*/
- dec([], _):-!.
- dec([H|L], NL) :- NH is H-1, add(NL, NH, NNL), dec(L, NNL).
- r :- create, dec(L, NL), nl, write(L), nl, write(NL).
Листинг программы
- 6 ?- r.
- List: [2,4,6,8,10,12,14,16]
- []
- _L143
- true.
Переписал dec так, чтобы уменьшал каждый 2 элемент. Не работает.
Листинг программы
- dec([H|[H1|L]], NL) :- add(NL, H, NL), NH is H1-1, add(NL, NH, NL), dec(L, NL).
Решение задачи: «Уменьшить каждое 2 значение списка на 1 и удалить конец списка после заданного элемента»
textual
Листинг программы
- dec([], []).
- dec([H1|T1], [H2|T2]) :-
- H2 = H1 - 1,
- dec(T1, T2).
Объяснение кода листинга программы
Код на языке Prolog с данной постановкой задачи может выглядеть следующим образом:
- dec([], []) - базовый случай, когда первый список пуст, то есть не содержит ни одного элемента. В этом случае второй список также будет пустым.
- dec([H1|T1], [H2|T2]) - рекурсивный случай, когда первый список не пуст. Здесь H1 - это первый элемент списка, а T1 - все остальные элементы. H2 - это результат вычитания единицы из значения H1, а T2 - результат рекурсивного вызова функции dec для списка T1. Таким образом, данная функция будет применяться к каждому элементу списка, уменьшая его значение на единицу и удалять конец списка после заданного элемента.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д