Каждый элемент, стоящий на чётной позиции, поменять местами с соседним элементом, стоящим перед ним - Prolog

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

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

Задача состоит в следующем: дан список, каждый элемент, стоящий на чётной позиции, поменять местами с соседним элементом, стоящим перед ним. Есть код, в котором каждый n-ный элемент заменяется на какое-то число. Понимаю, что переделать довольно просто, но ничего не выходит. Помогите, пожалуйста! Visual Prolog. Вот код, от которого пыталась оттолкнуться (меняет каждый n-ный элемент списка на какое-то число):
Листинг программы
  1. class predicates
  2. replace_nth: (A*, positive N, A With) -> A*.
  3. replace_nth: (A*, positive Counter, positive N, A With) -> A*.
  4. clauses
  5. replace_nth(L, N, A) = replace_nth(L, N, N, A):-
  6. N > 1,
  7. !.
  8. replace_nth(L, _, _) = L.
  9. replace_nth([_ | L], 1, N, A) = [A | replace_nth(L, N, N, A)]:- !.
  10. replace_nth([H | L], C, N, A) = [H | replace_nth(L, C - 1, N, A)].
  11. replace_nth([], _, _, _) = [].
  12.  
  13. run():-
  14. L = [math::random(10) || _ = std::fromTo(1, 20)],
  15. write(L), nl,
  16. write(replace_nth(L, 2, 3)), nl,
  17. _ = readLine().

Решение задачи: «Каждый элемент, стоящий на чётной позиции, поменять местами с соседним элементом, стоящим перед ним»

textual
Листинг программы
  1. class predicates
  2.     replace2: (A*) -> A*.
  3.  
  4. clauses
  5.     replace2([X,Y|T1]) = [Y,X|T2] :-
  6.         !,
  7.         T2 = replace2(T1).
  8.     replace2(L) = L.
  9.  
  10.     run():-
  11.         L = [math::random(10) || _ = std::fromTo(1, 20)],
  12.         write(L), nl,
  13.         write(replace2(L)), nl,
  14.         _ = readLine().

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

В данном коде на языке Prolog определён предикат replace2, принимающий на вход список (обозначен как A*), и возвращающий список, в котором каждый элемент, стоящий на чётной позиции, поменян местами с соседним элементом, стоящим перед ним. Синтаксис замены в Prolog выглядит следующим образом: [X,Y|T1] = [Y,X|T2] Где: — X и Y — элементы списка — T1 и T2 - это «хвосты» списков, которые рекурсивно обрабатываются Также в коде определён пользовательский метод math::random, который генерирует случайное число от 1 до 10. В основной части кода создаётся список L, заполняемый случайными числами от 1 до 20. Данный список выводится на экран, а затем применяется метод replace2, список после которого также выводится на экран. Кроме того, в основной части кода предусмотрена обработка ввода с клавиатуры, которая позволяет использовать данный код в интерактивном режиме.

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


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

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

7   голосов , оценка 4 из 5

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

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

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