Программу которая должна выполнять циклический сдвиг - Prolog
Формулировка задачи:
Написать программу которая должна выполнять циклический сдвиг в права вправо на заданное с клавиатуры число. Пример [1,2,3,4,5], сдвиг на два [4,5,1,2,3].
Решение задачи: «Программу которая должна выполнять циклический сдвиг»
textual
Листинг программы
domains int=integer intl=int* predicates app(intl,intl,intl) len(intl,int) head(intl,int,intl) cut(intl,int,intl) rot(intl,int,intl) clauses app([],X,X). app([H|T],X, [H|R]) :- app(T,X,R). len([],0). len([_|T],N) :- len(T,N1), N=N1+1. head(_,0,[]). head([H|T],N,[H|R]) :- N1=N-1, head(T,N1,R). cut(X,0,X). cut([_|T],N,R) :- N1=N-1, cut(T,N1,R). rot(X,N,Y) :- len(X,L), NN=N mod L, L1=L-NN, head(X,L1,X1), cut(X,L1,X2), app(X2,X1,Y).
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- В начале кода определены типы данных и множество утверждений (predicates).
- Далее идут правила (clauses) для работы с данными.
- Первое правило для функции app([],X,X) говорит, что если первый аргумент пуст, то второй и третий аргументы равны между собой.
- Второе правило для функции app([H|T],X, [H|R]) говорит, что если первый аргумент не пуст, то второй и третий аргументы равны между собой, а если первый аргумент пуст, то второй и третий равны между собой.
- Третье правило для функции len([],0) говорит, что если аргумент пуст, то результат будет 0.
- Четвертое правило для функции len([_|T],N) :- len(T,N1), N=N1+1 говорит, что если аргумент не пуст, то результат будет равен сумме результата для пустого списка и единицы.
- Пятое правило для функции head(_,0,[]) говорит, что если аргументы равны нулю, то результат будет пустым списком.
- Шестое правило для функции head([H|T],N,[H|R]) :- N1=N-1, head(T,N1,R) говорит, что если первый аргумент не пуст, то результат будет равен второму аргументу, уменьшенному на единицу, и третьему аргументу без изменений.
- Седьмое правило для функции cut(X,0,X) говорит, что если третий аргумент равен нулю, то результат будет равен второму аргументу.
- Восьмое правило для функции cut([_|T],N,R) :- N1=N-1, cut(T,N1,R) говорит, что если третий аргумент не равен нулю, то результат будет равен второму аргументу, уменьшенному на единицу, и третьему аргументу без изменений.
- Девятое правило для функции rot(X,N,Y) :- len(X,L), NN=N mod L, L1=L-NN, head(X,L1,X1), cut(X,L1,X2), app(X2,X1,Y) говорит, что результат будет равен третьему аргументу, если длина списка равна L, NN - это результат деления N на L, L1 - это результат вычитания NN из L, head(X,L1,X1) - это результат получения головы списка длиной L1, cut(X,L1,X2) - это результат получения хвоста списка длиной L1, app(X2,X1,Y) - это результат объединения двух списков.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д