Вставка в список в заданную позицию заданное число раз - Prolog
Формулировка задачи:
А не могли бы вы,если не сложно, посмотреть еще одну программку, которую я пытасюсь написать ?
Задача: вставить в список константу X, начиная с N-ой позиции K раз .
Листинг программы
- domains
- i=integer
- list=i*
- predicates
- nondeterm ins_in_pos(i,list,i,list)
- nondeterm ins_k_times(i,list,i,i,list)
- clauses
- ins_in_pos(X,[],_,[X]).
- 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).
- ins_k_times(_, _, _, 0, _) :- !.
- ins_k_times(X, [H|T], N, K, [H|Q]) :- K>0, K1=K-1, N1=N-1, ins_in_pos(X,[H|T],N1,[H|Q1]), ins_k_times(X, [H|Q1], N, K1, [H|Q]).
- goal
- ins_k_times(3, [5,5,5,5,5], 2, 4, L).
Решение задачи: «Вставка в список в заданную позицию заданное число раз»
textual
Листинг программы
- domains
- i=integer
- list=i*
- predicates
- nondeterm ins_k_times(i,list,i,i,list)
- clauses
- ins_k_times(_, L, 0, 0, L) :- !.
- ins_k_times(X, L, 0, K, [X|T]) :- !,
- K1 = K-1,
- ins_k_times(X, L, 0, K1, T).
- ins_k_times(X, [H|T], N, K, [H|Q]) :-
- N1 = N-1,
- ins_k_times(X, T, N1, K, Q).
- goal
- ins_k_times(3, [5,5,5,5,5], 3, 3, L).
Объяснение кода листинга программы
В этом коде определена функция ins_k_times
, которая добавляет элемент в список определенное количество раз.
В первой строке domains
объявлены типы данных:
i
- целочисленный тип (integer)list
- список целочисленных значений (i*) Затем, в строкеpredicates
, определена недетерминированная функцияins_k_times
, которая принимает следующие аргументы:i
- целочисленное значениеlist
- список целочисленных значенийN
- счетчик количества добавленийK
- счетчик количества элементов, которые нужно добавитьL
- результат функции В строкеclauses
определены следующие правила:- Первое правило гласит, что если
N
иK
равны нулю, то функция завершается успешно и возвращает списокL
. - Второе правило гласит, что если
N
равно нулю, то функция завершается успешно и возвращает список[H|Q]
. - Третье правило гласит, что если
N
не равно нулю, то функция рекурсивно вызывается с аргументамиN1
,K1
иQ
, гдеN1
равноN-1
, аK1
равноK-1
. В строкеgoal
определена задача: добавить число 3 в список[5,5,5,5,5]
три раза.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д