Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
3 / 3 / 1
Регистрация: 20.10.2013
Сообщений: 94
1

Clojure Создание третьего списка путём сложения элементов двух списков

22.05.2014, 17:19. Показов 1561. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!)Дана такая задача

Даны 2 списка, создать третий путем сложения поочередно элементов
1й элемент нового списка это сумма 1х элементов данных списков
2й элемент-сумма вторых и тд

Иными словами,например 2 списка

(2 3 4) и (3 4 5)

и нужно чтобы получилось так ((+2 3)(+3 4)(+4 5))

Вот мои наработки,здесь ругается - (cons (task (cdr s1) (cdr s2))))))) в конце 2-ой строки,там надо как-то поставить скобку,не знаю как.

Lisp
1
2
3
(defun task (s1 s2) 
  (cond ((null (cdr s2)) (cons (+ (car s1) (car s2)) nil)) (t (cons (+ (car s1) (car s2)) (cons  (task (cdr s1) (cdr s2)))))))
(task '(2 3 4) '(3 4 5))
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2014, 17:19
Ответы с готовыми решениями:

Создание списка поочередным вытаскиваем элементов из двух списков
Даны два списка А, В. Составить третий список С, элементами которого являются элементы А, В...

Создание списка, представляющего собой объединение (по операции ИЛИ) элементов двух списков
Создание списка, представляющего собой объединение (по операции ИЛИ) элементов двух списков.

Создание списка, представляющего собой объединение (по операции ИЛИ) элементов двух списков
Создание списка, представляющего собой объединение (по операции ИЛИ) элементов двух списков.

Функция сложения элементов двух списков
Доброго времени суток!!! Поскольку я новичок, помогите пожалуйста, следует написать функцию...

6
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
22.05.2014, 17:35 2
Lisp
1
2
> (mapcar #'+ '(1 2 3) '(1 2 3))
(2 4 6)
Добавлено через 2 минуты
Lisp
1
2
3
4
5
6
(defun map-sum (w v)
  (cond ((null w) nil)
        (t (cons (+ (car w) (car v)) (map-sum (cdr w) (cdr v))))))
 
> (map-sum '(1 2 3)  '(4 5 6))
(5 7 9)
Добавлено через 45 секунд
Lisp
1
2
3
4
5
(defun map-sum (w v)
  (when w (cons (+ (car w) (car v)) (map-sum (cdr w) (cdr v)))))
 
> (map-sum '(1 2 3)  '(4 5 6))
(5 7 9)
Добавлено через 3 минуты
Lisp
1
2
3
4
5
6
7
(defun map-sum (w v)
  (loop for a in w
        for b in v
        collect (+ a b)))
 
> (map-sum '(1 2 3)  '(4 5 6))
(5 7 9)
Lisp
1
2
3
4
(defun map-sum (w v) (mapcar #'+ w v))
 
> (map-sum '(1 2 3)  '(4 5 6))
(5 7 9)
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,645
Записей в блоге: 13
22.05.2014, 17:50 3
Lisp
1
2
3
4
5
6
7
8
9
(defun sum-pair (l1 l2)
  (iter (for i1 in l1)
        (for i2 in l2) (collecting (+ i1 i2))))
 
==> sum-pair
 
(sum-pair '(1 2 3) '(4 5 6))
 
==> (5 7 9)
1
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
22.05.2014, 18:36 4
Clojure:
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defn task [c1 c2]
  (loop [[x & xs :as all1] c1
         [y & ys :as all2] c2
         e-coll nil]
    (if (or (empty? all1) (empty? all2))
      (reverse e-coll)
      (recur xs ys (cons (+ x y) e-coll)))))
;; => #'user/task
 
(task '(2 3 4) '(3 4 5))
;; => (5 7 9)
2
3 / 3 / 1
Регистрация: 20.10.2013
Сообщений: 94
22.05.2014, 18:47  [ТС] 5
Спасибо)
0
3 / 3 / 1
Регистрация: 20.10.2013
Сообщений: 94
26.05.2014, 10:27  [ТС] 6
А можно сделать так,чтобы выводилось сумма больше 7-ми?Только 9-тка.


Lisp
1
2
3
4
5
6
(defun map-sum (w v)
  (cond ((null w) nil)
        (t (cons (+ (car w) (car v)) (map-sum (cdr w) (cdr v))))))
 
> (map-sum '(1 2 3)  '(4 5 6))
(5 7 9)
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,645
Записей в блоге: 13
26.05.2014, 11:04 7
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun map-sum (w v h) ;; вывод сумм, больших h
  (cond ((null w) nil)
        (t (let ((z (+ (car w) (car v))))
                 (if (> z h) (cons z (map-sum (cdr w) (cdr v) h))
                                     (map-sum (cdr w) (cdr v) h)))))) 
 
==> map-sum
 
(map-sum '(1 2 3) '(4 5 6) 7)
 
==> (9)
0
26.05.2014, 11:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2014, 11:04
Помогаю со студенческими работами здесь

Обработка соответствующих элементов двух списков и формирование третьего
Даны два списка одинаковой длины. Получить третий список, каждый элемент равен 1, если элементы...

Написать функцию попарного сложения элементов двух списков
Написать функцию попарного сложения элементов двух СПИСКОВ. Учесть, что списки м.б. РАЗНОЙ ДЛИНЫ!!!...

Создание нового списка путём удаления из старого нечётных элементов
Требуется написать предикат p(+V, ?L) - истинный тогда и только тогда, когда список L получается...

Подсчет количества элементов вложенных списков из списка и создание нового списка из этих значений
Подсчет количества элементов вложенных списков из списка и создание нового списка из этих значений....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru