Функция добавляющая в конец списка число, что бы сумма всех чисел в списке была равно 100 - Lisp

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

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

добрый вечер, нужна помощь людей знающих лисп. в этот раз уже даже наметок нет. подскажите как это делать? функция: 3)Добавляющая элемент в конец числового списка, чтобы сумма элементов этого списка стала равна 100. Например, (2 10 15 50 30) –> (2 10 15 50 30 -7). знаю что нужно создать счетчик, но вот как впихнуть в последний элемент вычитание 100 и получившегося счетчика, не знаю((
появилась идея, вот даже считает он верно только в результате выводит nil и число которое нужно добавить
(defun num-counter (l &optional (sum 0))
    (cond 
          ((null (car l)) (list l (- 100 sum)))
          (t(num-counter (cdr l) (+ sum (car l))))
))

Решение задачи: «Функция добавляющая в конец списка число, что бы сумма всех чисел в списке была равно 100»

textual
Листинг программы
(defun task (lst)
  (append lst (list (- 100 (apply '+ lst)))))
 
==> task
 
(task '(1 2 3))
 
==> (1 2 3 94)
 
(task '(1 2 300))
 
==> (1 2 300 -203)

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

В коде определена функция с именем task. Она принимает в качестве аргумента список (lst). В функции используется оператор append, чтобы добавить в конец списка число, которое вычисляется следующим образом: из 100 вычитается результат применения функции + к списку lst. При вызове функции task со списком (1 2 3) в качестве аргумента, результатом будет список (1 2 3 94), так как 100 - (1 + 2 + 3) = 94. При вызове функции task со списком (1 2 300) в качестве аргумента, результатом будет список (1 2 300 -203), так как 100 - (1 + 2 + 300) = -203.

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


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

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

14   голосов , оценка 4.071 из 5
Похожие ответы