Программу которая должна выполнять циклический сдвиг - Prolog

Узнай цену своей работы

Формулировка задачи:

Написать программу которая должна выполнять циклический сдвиг в права вправо на заданное с клавиатуры число. Пример [1,2,3,4,5], сдвиг на два [4,5,1,2,3].

Решение задачи: «Программу которая должна выполнять циклический сдвиг»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. app(intl,intl,intl)
  7. len(intl,int)
  8. head(intl,int,intl)
  9. cut(intl,int,intl)
  10. rot(intl,int,intl)
  11.  
  12. clauses
  13. app([],X,X).
  14. app([H|T],X, [H|R]) :- app(T,X,R).
  15.  
  16. len([],0).
  17. len([_|T],N) :- len(T,N1), N=N1+1.
  18.  
  19. head(_,0,[]).
  20. head([H|T],N,[H|R]) :- N1=N-1, head(T,N1,R).
  21.  
  22. cut(X,0,X).
  23. cut([_|T],N,R) :- N1=N-1, cut(T,N1,R).
  24.  
  25. 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).

Объяснение кода листинга программы

  1. В коде используется язык программирования Prolog.
  2. В начале кода определены типы данных и множество утверждений (predicates).
  3. Далее идут правила (clauses) для работы с данными.
  4. Первое правило для функции app([],X,X) говорит, что если первый аргумент пуст, то второй и третий аргументы равны между собой.
  5. Второе правило для функции app([H|T],X, [H|R]) говорит, что если первый аргумент не пуст, то второй и третий аргументы равны между собой, а если первый аргумент пуст, то второй и третий равны между собой.
  6. Третье правило для функции len([],0) говорит, что если аргумент пуст, то результат будет 0.
  7. Четвертое правило для функции len([_|T],N) :- len(T,N1), N=N1+1 говорит, что если аргумент не пуст, то результат будет равен сумме результата для пустого списка и единицы.
  8. Пятое правило для функции head(_,0,[]) говорит, что если аргументы равны нулю, то результат будет пустым списком.
  9. Шестое правило для функции head([H|T],N,[H|R]) :- N1=N-1, head(T,N1,R) говорит, что если первый аргумент не пуст, то результат будет равен второму аргументу, уменьшенному на единицу, и третьему аргументу без изменений.
  10. Седьмое правило для функции cut(X,0,X) говорит, что если третий аргумент равен нулю, то результат будет равен второму аргументу.
  11. Восьмое правило для функции cut([_|T],N,R) :- N1=N-1, cut(T,N1,R) говорит, что если третий аргумент не равен нулю, то результат будет равен второму аргументу, уменьшенному на единицу, и третьему аргументу без изменений.
  12. Девятое правило для функции 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) - это результат объединения двух списков.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы