Вставить заданный элемент в список на N-ую позицию - Prolog
Формулировка задачи:
Задан список вещественных чисел.
1) Вставить заданный элемент в список на N-ую позицию.
2) Определить максимальный элемент полученного списка.
Вот что у меня получилось.
Помогите сделать вывод для Н-ой позиции и правильно ли описал процедуру для нее?
и правильно ли определяется максимальный элемент?
Листинг программы
- domains
- список_вещ=real*
- число=real
- predicates
- макс_элемент(список_вещ, число)
- n_позиция(список_вещ,список_вещ,число,число)
- ввод_списка(список_вещ)
- вывод_списка(список_вещ)
- clauses
- %1 - процедура ввода списка
- ввод_списка([H | T]):-
- write("Введите элемент списка (вещественное число): "),
- readreal (H),
- ввод_списка (T).
- ввод_списка ([ ]).
- %2 - процедура вывода списка
- вывод_списка([ ]).
- вывод_списка([H | T]):-
- write(H, " "),
- вывод_списка(T).
- %3 - заданный элемент в Н-ую позицию
- n_позиция(1,E,L,[E|L]):-!.
- n_позиция(N,E,[X|T],[X|T1]):-
- N1=N-1,
- n_позиция(N1,E,T,T1).
- %4 - максимальный элемент полученного списка
- макс_элемент([H],H).
- макс_элемент([H|T],H):-
- макс_элемент(T,M), H>M,!.
- макс_элемент([H|T],M):-
- макс_элемент(T,M).
- goal
- write("Некоторые процедуры для работы со списками"), nl, nl,
- write(" Введите исходный список"), nl,
- ввод_списка(L1), nl,
- write("Исходный список"), nl,
- вывод_списка(L1), nl, nl,
- write("Максимальный элемент списка: "),
- макс_элемент(L1, M),
- write(M), nl, nl.
Решение задачи: «Вставить заданный элемент в список на N-ую позицию»
textual
Листинг программы
- domains
- reall=real*
- predicates
- ins_in_pos(real,reall,integer,reall)
- clauses
- ins_in_pos(_,[],N,[]) :- N>0, write("Error!"), nl, fail.
- ins_in_pos(X,T,0,[X|T]) :- !.
- ins_in_pos(X,[H|T],N,[H|Q]) :- N1=N-1, ins_in_pos(X,T,N1,Q).
Объяснение кода листинга программы
- В этом коде используется язык программирования Prolog.
- Задача программы - вставить заданный элемент в список на N-ую позицию.
- Код содержит два предиката:
ins_in_pos
иreall
. - Предикат
reall
относится к типу данныхreal
и используется для обозначения вещественных чисел. - Предикат
ins_in_pos
имеет четыре аргумента: X, T, N, Q. - Аргумент X обозначает элемент, который необходимо вставить в список.
- Аргумент T обозначает список, в который необходимо вставить элемент.
- Аргумент N обозначает позицию, на которую необходимо вставить элемент.
- Аргумент Q обозначает результат работы программы.
- В первом утверждении предиката
ins_in_pos
проверяется, что позиция N больше нуля. Если это условие не выполняется, выводится сообщение об ошибке и программа завершается. - Во втором утверждении предиката
ins_in_pos
проверяется, что позиция N равна нулю. Если это условие выполняется, элемент X вставляется в начало списка и возвращается результат. - В третьем утверждении предиката
ins_in_pos
проверяется, что позиция N больше нуля. Если это условие выполняется, переменная N1 присваивается значение N-1 и рекурсивно вызывается функцияins_in_pos
. - Результатом работы программы является список, в котором элемент X вставлен на позицию N.
- В данном коде не используются скобки, чтобы выделить названия и значения переменных. Вместо этого используется формат написания с отступами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д