Подскажите пожалуйста, как доделать код - Prolog

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

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

Доброго времени суток. Такой вопрос, есть задание, что нужно из элементов исходного списка сформировать новый список, в котором первый элемент будет равен сумме всех элементов исходного, второй элемент - сумме элементов хвоста исходного, третий элемент нового списка - сумме элементов с третьего до конца исходного и т.д. Я представляю это так, что мы берем список, если он пустой, то в ответе так же пустой списк, если в нем один элемент, то в ответе тоже один элемент
Листинг программы
  1. nlist([], 0).
  2. nlist([X], [X])
далее идет основная часть по составлению нового списка, если в исходном было более одного элемента, поэтому считаем сумму всех эго элементов (для этого у нас есть программа для вычисления суммы элементов списка, предикат summ, который принимает введенный список и выводит результат
Листинг программы
  1. summ([X|Y], Sum):- summ(Y, Sum1)
  2. , Sum is Sum1 + X.
), так же мы можем удалять первый элемент элемент списка (вводим список, удаляем первый элемент, выводим результат)
Листинг программы
  1. delete([X|Y], 1, [X|L]):- delete(Y, 1, L).
  2. delete(X, 1, K), write(K).
можем ведь мы получать каждый новый элемент нового списка путем суммирования элементов исходного списка, удаляя каждый раз по одному первому элементу перед суммированием..? то есть, например,
Листинг программы
  1. nlist([X|Y], S) :- S is summ([X|Y], D), D is delete(X, 1, K).
понимаю, что последний код неверен, только как тогда можно по такому принципу получить новый список и его элементы? Объясните пожалуйста.

Решение задачи: «Подскажите пожалуйста, как доделать код»

textual
Листинг программы
  1. summ([], []).
  2. summ([X|Y], Sum) :-
  3.     summ(Y, Sum1),
  4.     Sum is Sum1 + X.
  5.  
  6. nlist([], []).
  7. nlist([X1|Y1], [X2|Y2]) :-
  8.     summ([X1|Y1], X2),
  9.     nlist(Y1, Y2).

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

  1. summ([], []) - это базовый случай для рекурсии, когда список пуст. В этом случае результат также будет пустым списком.
  2. summ([X|Y], Sum) :- summ(Y, Sum1), Sum is Sum1 + X - это рекурсивный случай. Здесь мы разбиваем список на две части: Y и X. Рекурсивно вызываем summ для Y, получая результат Sum1. Затем мы добавляем X к Sum1 и присваиваем результат переменной Sum.
  3. nlist([], []) - это базовый случай для рекурсии, когда список пуст. В этом случае результат также будет пустым списком.
  4. nlist([X1|Y1], [X2|Y2]) :- summ([X1|Y1], X2), nlist(Y1, Y2) - это рекурсивный случай. Здесь мы разбиваем список на две части: Y1 и X1. Рекурсивно вызываем nlist для Y1, получая результат X2. Затем мы добавляем X2 к Y2 и присваиваем результат переменной Y2.

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


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

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

14   голосов , оценка 3.929 из 5

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

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

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