Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 32

В числовом списке сложить каждые два соседних элемента

29.12.2011, 08:41. Показов 1674. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите рекурсивно решить задачу(сижу на экзамене=)

(f'(2 3 4 5 6 7))

пример работы ((5) (9) (13))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2011, 08:41
Ответы с готовыми решениями:

Функционал: каждые соседние два элемента списка с четным количеством элементов превратить в двухэлементный список
Здравствуйте! помогите пожалуйста со следующим заданием Определить функционал, который каждые соседние два элемента списка из парным...

Сколько положительных чисел в числовом списке
Определить функцию, вычисляющую, сколько положительных чисел в числовом списке двумя вариантами: 1. С помощью цикла 2. С помощью...

Убрать дубликаты элементов в числовом списке
Здравствуйте! Нужно итерационно удалить повторы из числового списка (Lisp). Например, при вводе '(5 8 9 5 8 9) программа должна...

8
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
12.07.2012, 08:43
Lisp
1
2
3
4
5
6
(defun sum-pair (w)
  (cond ((null w) nil)
        ((cons (list (+ (car w) (cadr w))) (sum-pair (cddr w))))))
 
> (sum-pair '(2 3 4 5 6 7))
((5) (9) (13))
Lisp
1
2
3
4
5
(defun sum-pair (w)
  (if (null w) nil (cons (list (+ (car w) (cadr w))) (sum-pair (cddr w)))))
 
> (sum-pair '(2 3 4 5 6 7))
((5) (9) (13))
Lisp
1
2
3
4
5
(defun sum-pair (w)
  (when w (cons (list (+ (car w) (cadr w))) (sum-pair (cddr w)))))
 
> (sum-pair '(2 3 4 5 6 7))
((5) (9) (13))
Lisp
1
2
3
4
5
(defun sum-pair (w)
  (loop for e on w by #'cddr collect (list (+ (car e) (cadr e)))))
 
> (sum-pair '(2 3 4 5 6 7))
((5) (9) (13))
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
12.07.2012, 09:42
Lisp
1
2
3
4
5
6
7
8
9
10
(defun partition (num list)
  (unless (null list)
    (cons (subseq list 0 num)
          (partition num (subseq list num)))))
 
(defun f (list)
  (mapcar #'(lambda (pair)
              (+ (car pair)
                 (cadr pair)))
          (partition 2 list)))
1
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
12.07.2012, 10:41
to Nameless One,
как вариант:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun partition (num list)
  (unless (null list)
    (cons (subseq list 0 num)
          (partition num (subseq list num)))))
 
;(defun f (list)
;  (mapcar #'(lambda (pair)
;              (+ (car pair)
;                 (cadr pair)))
;          (partition 2 list)))
 
(defun f (list)
  (mapcar #'(lambda (v) (reduce #'+ v)) (partition 2 list)))
 
> (f '(2 3 4 5 6 7))
(5 9 13)
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun combine-elms (n w &optional (m n) ac acc)
  (cond ((null w) (reverse (cons (reverse ac) acc)))
        ((zerop m) (combine-elms n w n nil (cons (reverse ac) acc)))
        ((combine-elms n (cdr w) (1- m) (cons (car w) ac) acc))))
 
(defun reduce-combined (function n w)
  (mapcar #'(lambda (v) (reduce function v)) (combine-elms n w)))
 
> (reduce-combined #'+ 2 '(2 3 4 5 6 7))
(5 9 13)
> (reduce-combined #'* 3 '(2 3 4 5 6 7))
(24 210)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
12.07.2012, 10:45
_sg, только и у тебя, и у меня в последних постах вывод неправильный
0
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
12.07.2012, 10:52
подстраивался под твое решение

Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
8
9
10
(defun combine-elms (n w &optional (m n) ac acc)
  (cond ((null w) (reverse (cons (reverse ac) acc)))
        ((zerop m) (combine-elms n w n nil (cons (reverse ac) acc)))
        ((combine-elms n (cdr w) (1- m) (cons (car w) ac) acc))))
 
(defun reduce-combined (function n w)
  (mapcar #'(lambda (v) (list (reduce function v))) (combine-elms n w)))
 
> (reduce-combined #'+ 2 '(2 3 4 5 6 7))
((5) (9) (13))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
12.07.2012, 11:27
Вот "до кучи" (HomeLisp):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun sum-pair (x)
   (let ((n (length x))
         (res nil))
        (dotimes (i (\ n 2) res)
          (setq res (append res (list (list (+ (car x) (cadr x))))))
          (setq x (cddr x))
        )
        (if (null x) res (setq res (append res (list x))))))       
 
==> sum-pair
 
(sum-pair '(1 2 3 4 ))
 
==> ((3) (7))
 
(sum-pair '(1 2 3 4 6))
 
==> ((3) (7) (6))
Кстати, первое решение _sg даст ошибку, если к-во элементов нечетное.

Опс... Не заметил, что решение должно быть рекурсивным. Тогда вот:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun sum-pair (x)
   (cond ((null x) nil)
         ((= (length x) 1) (list x))
         (t (append (list (list (+ (car x) (cadr x)))) (sum-pair (cddr x))))))
 
 
==> sum-pair
 
(sum-pair '(1 2 3 4))
 
==> ((3) (7))
 
(sum-pair '(1 2 3 4 8))
 
==> ((3) (7) (8))
Корректно работает с четной и нечетной длиной списка. И рекурсивно.
0
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
12.07.2012, 12:37
Lisp
1
2
3
4
5
(defun sum-pair (w)
  (if (cdr w) (cons (list (+ (car w) (cadr w))) (sum-pair (cddr w))) (list w)))
 
> (sum-pair '(2 3 4 5 6 7 8))
((5) (9) (13) (8))
to Catstail:
Lisp
1
(t (cons (list (+ (car x) (cadr x))) (sum-pair (cddr x))))))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
12.07.2012, 18:32
Согласен, так рациональнее

Добавлено через 4 часа 58 минут
А вот еще одно рекурсивное решение

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(let ((c 0) (res nil))
   (defun f (x)  (if (null x) res (progn (setq c (+ c (car x))) 
                                         (g (cdr x)))))
   (defun g (x)  (if (null x) (append res (list (list c))) 
                                  (progn (setq c (+ c (car x)))
                                         (setq res (append res (list (list c))))
                                         (setq c 0)
                                         (f (cdr x)))))
   (defun reset nil (setq res nil) (setq c 0)))
 
==> reset
 
(defun task (x) (reset) (f x))
 
==> task
 
(task '(1 2 3))
 
==> ((3) (3))
 
(task '(1 2 3 6 7 7 8 9 -7 11))
 
==> ((3) (9) (14) (17) (4))
 
(task '(1 2 3 6 7 7 8 9 -7 11 7))
 
==> ((3) (9) (14) (17) (4) (7))
Хотя рациональным его никак не назовёшь...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2012, 18:32
Помогаю со студенческими работами здесь

Сложить два соседних элемента массива
Как сравнивать каждый раз два последовательных элемента массива? Например: В массиве записаны числа: 0, 1, 2, 3, 4, 5, 6; Нужно к 0...

Определение, имеются ли в числовом списке два подряд идущих нулевых элемента
Определение, имеются ли в числовом списке два подряд идущих нулевых элемента

Сложить два соседних элемента списка и вывести их в новый список
Здраствуйте! помогите пожалуйста разобраться с задачей! Нужно сложить два соседних элемента списка и вывести их в новый список!

Упорядочить заданный массив А(n) по неубыванию, многократно переставляя каждые два соседних элемента
Упорядочить заданный массив А(n) по неубыванию, многократно переставляя каждые два соседних элемента, нарушающие порядок. Процесс...

Найти в списке два соседних элемента одного знака
Дан список чисел. Если в нем есть два соседних элемента одного знака, выведите эти числа. Если соседних элементов одного знака нет — не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru