Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 6
1

Clojure Реализовать функцию, которая из двух списков, состоящих из чисел, строит список из парных разностей

18.02.2014, 15:57. Показов 856. Ответов 8
Метки нет (Все метки)

Реализовать функцию, которая из двух списков, состоящих из чисел,
строит список из парных разностей. Например для (1 2 3 4) и (4 3 1 2)
должно получиться (-3 -1 2 2).

и второе уже с одним списком. Реализовать функцию, которая оставляет в списке из чисел лишь
элементы, кратные заданному числу.

нужно варианты только хорошего или плохого рекурсивное решение.
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2014, 15:57
Ответы с готовыми решениями:

Clojure Написать функцию которая по линейныму списку вида (1 2 3 4 5) строит сложный список вида(1) (2) (3) (4) (5)
Здравствуйте. Помогите написать функцию которая по линейныму списку вида (1 2 3 4 5) строит сложный...

Clojure Определите функцию (f s n), которая из списка чисел s создает новый список, прибавляя к каждому атому число n
Определите функцию (f s n), которая из списка чисел s создает новый список, прибавляя к каждому...

Clojure Определить функцию, объединяющую атомы двух списков
Помогите определить функцию, объединяющую атомы двух списков в один ассоциативный список...

Определить функцию MERGE которая создает из двух списков цифровых атомов новый отсортированный список
Определить функцию MERGE которая создает из двух списков цифровых атомов новый отсортированный...

8
493 / 426 / 56
Регистрация: 29.04.2011
Сообщений: 443
18.02.2014, 16:31 2
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(defun diff (l lst)
    (if l
        (cons (- (car l) (car lst)) (diff (cdr l) (cdr lst)))
        nil))
 
(diff '(1 2 3 4) '(4 3 1 2))
 
==> (-3 -1 2 2)
 
 
(defun aliquot (l n) 
    (cond
        ((null l) nil)
        ((zerop (% (car l) n)) (cons (car l) (aliquot (cdr l) n)))
        (t (aliquot (cdr l) n))))
 
(aliquot '(1 2 3 4 5 6 7 8 9) '3)
 
==> (3 6 9)
0
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 6
18.02.2014, 16:39  [ТС] 3
Спасибо.
Но что такое " (zerop (% " ?
такого еще не знаем, это возможно как то проще заменить?
0
493 / 426 / 56
Регистрация: 29.04.2011
Сообщений: 443
18.02.2014, 17:15 4
Цитата Сообщение от IS_IT Посмотреть сообщение
Спасибо.
Но что такое " (zerop (% " ?
такого еще не знаем, это возможно как то проще заменить?
проверка кратности.
% - тот же mod - деление по модулю. (% 6 3) = (mod 6 3) = 0.
zerop - одноместный предикат, возвращающий t, если значение функции равно нулю.
0
Модератор
Эксперт Python
28584 / 15449 / 3052
Регистрация: 12.02.2012
Сообщений: 25,322
Записей в блоге: 4
18.02.2014, 17:41 5
Лучший ответ Сообщение было отмечено как решение

Решение

Самое простое решение первой задачи:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun task (lst1 lst2)
  (mapcar '- lst1 lst2))
 
==> task
 
(task '(1 2 3 4) '(4 3 2 1))
 
==> (-3 -1 1 3)
 
(task '(1 2 3 4) '(4 3 1 2))
 
==> (-3 -1 2 2)
Добавлено через 4 минуты
И второй:

Lisp
1
2
3
4
5
6
7
8
(defun task (lst n)
  (mapcan #'(lambda (x) (if (zerop (% x n)) (list x) nil)) lst))
 
==> task
 
(task '(1 2 3 4 5 6 7 8 9 10 11 12) 3)
 
==> (3 6 9 12)
Добавлено через 26 секунд
Цитата Сообщение от route66 Посмотреть сообщение
% - тот же mod
- только в HomeLisp.
2
493 / 426 / 56
Регистрация: 29.04.2011
Сообщений: 443
18.02.2014, 19:53 6
Цитата Сообщение от Catstail Посмотреть сообщение
- только в HomeLisp.
не только в HomeLisp.
Emacs Lisp
1
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
21.02.2014, 04:52 7
scheme
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
> (define (foo l1 l2)
  (cond ((= (length l1)(length l2))
        (if (null? l1)
            null
            (cons (- (car l1) (car l2)) (foo (cdr l1) (cdr l2)))))
        (else null)))
 
> (foo '(1 2 3) '( 4 5 6))
(-3 -3 -3)
> (foo '(1 2) '(3 4 5))
()
>
1
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
21.02.2014, 09:21 8
Clojure:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defn task1 [c1 c2]
  (map - c1 c2))
;; => #'user/task1
 
(task1 '(1 2 3 4) '(4 3 1 2))
;; => (-3 -1 2 2)
 
(defn task2 [coll n]
  (filter #(zero? (mod % n)) coll))
;; => #'user/task2
 
(task2 '(1 2 3 4 5 6 7 8 9) 3)
;; => (3 6 9)
 
(task2 '(1 2 3 4 5 6 7 8 9) 2)
;; => (2 4 6 8)
2
493 / 426 / 56
Регистрация: 29.04.2011
Сообщений: 443
21.02.2014, 10:00 9
Clojure:
Lisp
1
2
3
4
5
(defn F [l n]
  (remove #(not (zero? (mod % n))) l))
 
(F '(1 2 3 4 5 6 7 8 9) '3)
==> (3 6 9)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2014, 10:00

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Clojure Определить функцию, возвращающую первый совпадающий элемент двух списков
Обращаюсь к великим умам для решение простых задач: Определить функцию, возвpащающую первый...

написать функцию которая на основе двух списков формирует новый список в котором чередуются элементы исходных
написать функцию которая на основе двух списков формирует новый список в котором чередуются...

Написать программу, которая получает список из списков из списков чисел
Всем привет, мне нужно написать программу, которая получает список из списков из списков чисел,...

Написать функцию, которая по списку строит сложный список
Нужно написать функцию, которая по списку ‘(a1 a2…aN) строит сложный список ((a1 a2) (a2 a3) …).

Clojure Используя функцию Defun, определить функцию f(a x), где а-S- выражение, а х-список, состоящий из 2-3 элементов, которая заменяет на а все атомы списка
1)Используя функцию Defun, определить функцию f(a x), где а-S- выражение, а х-список, состоящий из...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.