Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Mashka_mulashka
24 / 24 / 11
Регистрация: 13.12.2011
Сообщений: 817
1

каждый нечетный элемент списка умножить на 2, каждый четный на 3. использовать только рекурсию CAR,CDR,COND,CONS

14.12.2013, 10:42. Просмотров 837. Ответов 5
Метки нет (Все метки)

каждый нечетный элемент списка умножить на 2, каждый четный на 3. использовать только рекурсию CAR,CDR,COND,CONS
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 10:42
Ответы с готовыми решениями:

Заменить каждый второй элемент списка на 0,используя только рекурсию, CAR, CDR, CONS,COND
Заменить каждый второй элемент списка на 0,используя только рекурсию, CAR, CDR, CONS,COND

Каждый нечетный элемент списка умножить на 2, каждый четный на 3
сначало пытаюсь написать хотя бы проверку на четность и умножение на 3. (defun четность (l) ...

Композицией базовых функций CAR, CDR, CONS, LIST
Добрый день! прошу помочь в решении задачи: Композицией базовых функций CAR, CDR, CONS, LIST...

Lisp. По какому принципу работают функции CAR,CDR,CONS?
Здравствуйте! Помогите пожалуйста понять как работают функции CAR,CDR,CONS. Например, есть список:...

Работа со списками в LISP, используя базовые функции CAR, CDR, CONS
Дан список ( (A B ( C ) ) (D (E) (K L M))) получить: список (C) список (A B C D) ...

5
Lambdik
1044 / 938 / 107
Регистрация: 04.11.2012
Сообщений: 971
Записей в блоге: 3
14.12.2013, 12:21 2
Lisp
1
2
3
4
5
6
7
8
(defun F (ls)
  (if ls
    (cons (cond
            ((oddp (car ls)) (* (car ls) 2))
            (t (* (car ls) 3))) (F (cdr ls)))))
 
> (F '(1 2 3 4 5 6 7 8 9 10))
(2 6 6 12 10 18 14 24 18 30)
0
transformator.t
defun
598 / 612 / 44
Регистрация: 30.04.2011
Сообщений: 701
14.12.2013, 12:27 3
Лучший ответ Сообщение было отмечено как решение

Решение

Lisp
1
2
3
4
5
6
(defun f (l)
           (if l
               (cons (if (oddp (car l))
                         (* (car l) 3)
                         (* (car l) 2))
                     (f (cdr l)))))
Добавлено через 2 минуты

Не по теме:

Lambdik, практически синхронистичность)) ты тоже только проснулся?))

2
Lambdik
1044 / 938 / 107
Регистрация: 04.11.2012
Сообщений: 971
Записей в блоге: 3
14.12.2013, 12:31 4
Цитата Сообщение от transformator.t Посмотреть сообщение
ты тоже только проснулся?

Не по теме:

Не я только освободился. Сегодня маленький семейный праздник, так что я не надолго.

0
_sg
4164 / 3908 / 297
Регистрация: 12.05.2012
Сообщений: 2,750
14.12.2013, 14:30 5
Lisp
1
2
3
4
5
6
(defun odd*2-even*3 (w &aux (a (car w)))
  (when w (cons (* a (if (oddp a) 2 3))
                (odd*2-even*3 (cdr w)))))
 
> (odd*2-even*3 '(3 -7 0 5 -4))
(6 -14 0 10 -12)
Добавлено через 5 минут
Lisp
1
2
3
4
5
6
(defun odd*2-even*3 (w)
  (when w (cons (* (car w) (if (oddp (car w)) 2 3))
                (odd*2-even*3 (cdr w)))))
 
> (odd*2-even*3 '(3 -7 0 5 -4))
(6 -14 0 10 -12)
Добавлено через 3 минуты
Lisp
1
2
3
4
5
(defun odd*2-even*3 (w)
  (mapcar #'(lambda (a) (* a (if (oddp a) 2 3))) w))
 
> (odd*2-even*3 '(3 -7 0 5 -4))
(6 -14 0 10 -12)
Добавлено через 1 минуту
Lisp
1
2
3
4
5
(defun odd*2-even*3 (w)
  (loop for a in w collect (* a (if (oddp a) 2 3))))
 
> (odd*2-even*3 '(3 -7 0 5 -4))
(6 -14 0 10 -12)
2
Catstail
Модератор
24847 / 12633 / 2307
Регистрация: 12.02.2012
Сообщений: 20,574
14.12.2013, 15:19 6
Люблю такие задачи... Особую пикантность им придает неясность: нечетный по значению или по порядковому номеру?

Если считать по порядку, то вот:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(defun task (lst)
  (mapcar #'(lambda (x y) (if (oddp y) (+ x x) (+ x x x))) lst (range 1 (length lst))))
 
==> task
 
(task '(1 2 3 11 22 33))
 
==> (2 6 6 33 44 99)
 
(defun task (lst &optional f)
  (cond ((null lst) nil)
        (f (cons (* 3 (car lst)) (task (cdr lst) (not f))))
        (t (cons (* 2 (car lst)) (task (cdr lst) (not f))))))
 
==> task
 
(task '(1 2 3 11 22 33))
 
==> (2 6 6 33 44 99)
1
14.12.2013, 15:19
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 15:19

Проверить, что каждый элемент списка больше предыдущего элемента на 5 (использовать функционалы)
Проверить, что каждый элемент списка больше предыдущего элемента на 5

Проверить, что каждый элемент списка является делителем последующего элемента Использовать функционалы
Проверить, что каждый элемент списка является делителем последующего элемента

Используя комбинацию CAR и CDR, выбрать из списка ((HEIGHT 72) (WEIGHT 175) (HAIR BLOND)) элемент 175 2
Доброе утро. Помогите с решением вот такой вот задачи 1. Используя комбинацию CAR и CDR, выбрать...


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

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

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