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

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

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

Доброго времени суток. Такой вопрос, есть задание, что нужно из элементов исходного списка сформировать новый список, в котором первый элемент будет равен сумме всех элементов исходного, второй элемент - сумме элементов хвоста исходного, третий элемент нового списка - сумме элементов с третьего до конца исходного и т.д. Я представляю это так, что мы берем список, если он пустой, то в ответе так же пустой списк, если в нем один элемент, то в ответе тоже один элемент
далее идет основная часть по составлению нового списка, если в исходном было более одного элемента, поэтому считаем сумму всех эго элементов (для этого у нас есть программа для вычисления суммы элементов списка, предикат summ, который принимает введенный список и выводит результат
), так же мы можем удалять первый элемент элемент списка (вводим список, удаляем первый элемент, выводим результат)
можем ведь мы получать каждый новый элемент нового списка путем суммирования элементов исходного списка, удаляя каждый раз по одному первому элементу перед суммированием..? то есть, например,
понимаю, что последний код неверен, только как тогда можно по такому принципу получить новый список и его элементы? Объясните пожалуйста.

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

textual
Листинг программы
summ([], []).
summ([X|Y], Sum) :- 
    summ(Y, Sum1),
    Sum is Sum1 + X.
 
nlist([], []).
nlist([X1|Y1], [X2|Y2]) :-
    summ([X1|Y1], X2),
    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
Похожие ответы