Вставка в список в заданную позицию заданное число раз - Prolog
Формулировка задачи:
А не могли бы вы,если не сложно, посмотреть еще одну программку, которую я пытасюсь написать ?
Задача: вставить в список константу X, начиная с N-ой позиции K раз .
Решение задачи: «Вставка в список в заданную позицию заданное число раз»
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]три раза.