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

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

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

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

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

textual
Листинг программы
  1. (defun task (lst)
  2.   (append lst (list (- 100 (apply '+ lst)))))
  3.  
  4. ==> task
  5.  
  6. (task '(1 2 3))
  7.  
  8. ==> (1 2 3 94)
  9.  
  10. (task '(1 2 300))
  11.  
  12. ==> (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

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

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

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