Функция, формирующая N список, содержащий суммы элементов с номерами 1 и N/2+1, 2 и N/2+2 и т. д - Lisp

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

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

В задаче допускается использовать любые предопределённые функции Lisp. Необходимо разработать функцию, формирующую на основе исходного списка длины N список, содержащий суммы элементов с номерами 1 и N/2+1, 2 и N/2+2 и т. д. N — аргумент функции. Например: Вход: (1 2 3 4 5 6 7 8 9 10). Выход: (7 9 11 13 15). Если можно, с комментариями, дабы понимать схему работы. Вроде и не особо сложно, как как-то решению не поддаётся. Если у кого-то найдётся время помочь, буду очень благодарен. Были какие-то попытки, но что-то всё не то.
Листинг программы
  1. (setq list '(1 2 3 4 5 6 7 8 9 10))
  2. (defun replacez (list list2)
  3. (cond ((= (/ (length list) 2) (length list2)) 0)
  4. (t (cons (nth (+ 1 (/ (length list) 2)) list) list2) (replacez list list2))
  5. )
  6. )
  7. (replacez list ())
  8. ***********************
  9. (defun f (l)
  10. (loop for a in l
  11. for b in
  12. (nthcdr (round
  13. (/ (length l) 2)) l)
  14. collect (+ a b)))
  15. ***********************
  16. (defun replacez(lst)
  17. (let* ((res nil) (n (length lst)) (k (/ n 2)))
  18. (dotimes (i k res)
  19. (setq res (append res (list (+ (car (subseq lst i (+ i 1))) (car (subseq lst (+ i k) (+ i k 1)))))))
  20. )
  21. )
  22. )
  23. (replacez '(1 2 3 4 5 6 7 8 9 10))
  24. ***********************
  25. (defun trans-list (lst)
  26. ;; последовательно создаем локальные переменные:
  27. (let* ((res nil) ;; здесь будет результат
  28. (n (length lst)) ;; длина списка
  29. (k (/ n 2))) ;; половина длины
  30. (dotimes (i k res) ;; цикл по i от 0 до k-1
  31. (setq res ;; приклеиваем в хвост результату...
  32. (append res (list (+ (car (subseq lst i (+ i 1))) ;; список из суммы i-го и i+k-го элементов
  33. (car (subseq lst (+ i k) (+ i k 1))))))))))
  34. ***********************
  35. (defun sum-shifted (w &optional (v (nthcdr (/ (length w) 2) w)))
  36. (when v (cons (+ (car w) (car v)) (sum-shifted (cdr w) (cdr v)))))
  37. ***********************
  38. (defun sum-shifted (w)
  39. (loop for a in w
  40. for b in (subseq w (/ (length w) 2))
  41. collect (+ a b)))
Все представленные решения с циклами, а необходим способ решения задачи без цикла.

Решение задачи: «Функция, формирующая N список, содержащий суммы элементов с номерами 1 и N/2+1, 2 и N/2+2 и т. д»

textual
Листинг программы
  1. (defun f (x y &rest a)
  2.   (list x y a))
  3.  
  4. ==> f
  5.  
  6. (f 'q 'w 1 2 3 4 5)
  7.  
  8. ==> (q w (1 2 3 4 5))

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

В коде определена функция с именем f. Она принимает три аргумента: x, y и дополнительное множество аргументов a. Дополнительные аргументы a могут быть любыми, но в данном случае они представлены списком чисел от 1 до N/2. Функция просто возвращает список из своих аргументов. В данном случае она вернет список (q w 1 2 3 4 5). При вызове функции f с аргументами 'q', 'w', 1, 2, 3, 4, 5, она вернет список (q w 1 2 3 4 5).

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


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

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

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

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

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

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