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

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

24.11.2012, 21:05. Показов 2269. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Используя функцию Defun, определить функцию, которая заменяет все отрицательные элементы списка х на а
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2012, 21:05
Ответы с готовыми решениями:

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

Удалить из списка все отрицательные элементы и поместить их в конец списка в обратном порядке
Пожалуста, помогите решить задачку: Составит программу, которая создает список L елементами...

Все отрицательные элементы массива списка перенести в его начало, а все остальные – в конец
Не понимаю как написать. Задача: Реализовать функцию: в которой все отрицательные элементы...

Удалить из списка все отрицательные элементы
Постановка задачи: Составить программу, которая удаляет из списка все отрицательные элементы ...

16
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.11.2012, 21:06 2
лисп?
0
1 / 1 / 0
Регистрация: 24.11.2012
Сообщений: 60
24.11.2012, 21:08  [ТС] 3
да, лисп
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
24.11.2012, 22:10 4
Lisp
1
2
3
4
5
6
7
8
9
10
(defun chng-a (x a)
  (cond ((null x) nil)
        ((< (car x) 0) (cons a (chng-a (cdr x) a)))
        (t (cons (car x) (chng-a (cdr x) a)))))
 
==> chng-a
 
(chng-a '(1 2 3 -2 -3 -1 6) 11)
 
==> (1 2 3 11 11 11 6)
Или так:

Lisp
1
2
3
4
5
6
7
8
9
(defun chng-a (x a)
  (mapcar #'(lambda (y) (if (< y 0) a y)) x))
 
 
==> chng-a
 
(chng-a '(1 2 3 -2 -3 -1 6) 11)
 
==> (1 2 3 11 11 11 6)
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
24.11.2012, 22:11 5
Lisp
1
2
3
4
5
6
7
(defun minus>a (w &aux (a (car w)) (d (cdr w)))
  (cond ((null w) nil)
        ((minusp a) (cons 'a (minus>a d)))
        ((cons a (minus>a d)))))
 
> (minus>a '(-1 1))
(A 1)
Lisp
1
2
3
4
5
6
7
(defun minus>a (x)
  (cond ((null x) nil)
        ((minusp (car x)) (cons 'a (minus>a (cdr x))))
        ((cons (car x) (minus>a (cdr x))))))
 
> (minus>a '(-1 1))
(A 1)
Lisp
1
2
3
4
5
(defun minus>a (w)
  (substitute-if 'a #'minusp w))
 
> (minus>a '(-1 1))
(A 1)
1
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 3
25.11.2012, 10:43 6
Для вложенных.

Lisp
1
2
3
4
5
6
(defun zamen (l x)
  (cond
    ((null x) nil)
    ((and (atom x) (numberp x) (< x 0)) l)
    ((atom x) x)
    (t (cons (zamen l (car x)) (zamen l (cdr x))))))
Lisp
1
>(zamen 'a '(b -1 (-3 (c)) 5 (-8 (3))))  ==>(b a (a (c)) 5 (a (3)))
1
Заблокирован
29.11.2012, 19:41 7
Цитата Сообщение от Lambdik Посмотреть сообщение
Для вложенных.
Как вариянт:
Lisp
1
2
3
4
5
6
7
8
(defun zamen (x l)
  (cond
    ((null l) nil)
    ((listp l) (cons (zamen x (car l)) (zamen x (cdr l))))
    ((minusp l) x)
    (l)
  )
)
или
Lisp
1
2
3
4
(defun rec-negative->a (lst a)
  (mapcar #'(lambda (x)  (if (listp x)
            (rec-negative->a x a)
            (if (minusp x) a x))) lst))
1
1 / 1 / 0
Регистрация: 24.11.2012
Сообщений: 60
30.11.2012, 06:37  [ТС] 8
Catstail, Не могли бы вы на примере показать, как это работает?
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.11.2012, 08:09 9
Lisp
1
2
3
4
5
6
7
(defun minus>a (w a)
  (cond ((null w) nil)
        ((minusp (car w)) (cons a (minus>a (cdr w) a)))
        ((cons (car w) (minus>a (cdr w) a)))))
 
> (minus>a '(-1 1) 10)
(10 1)
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
30.11.2012, 22:33 10
Цитата Сообщение от Татьянна Посмотреть сообщение
Catstail, Не могли бы вы на примере показать, как это работает?
Lisp
1
2
3
4
5
6
(defun chng-a (x a)
  (cond ((null x) nil)  ;; если список пуст - заменять нечего
        ((< (car x) 0) (cons a (chng-a (cdr x) a))) ;; если первый элемент отрицателен -
                                                                  ;; строим новый список: первый его элемент - а, 
                                                                  ;; а хвост есть наша функция, примененная к хвосту исходного
        (t (cons (car x) (chng-a (cdr x) a)))))       ;; если элемент неотрицателен, сохраняем его ...
1
1 / 1 / 0
Регистрация: 24.11.2012
Сообщений: 60
01.12.2012, 07:54  [ТС] 11
Спасибо конечно, но здесь используется рекурсия, а мне нужно без неё, и, исходить нужно из того, что в списке имеется всего 2-3 элемента.
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
01.12.2012, 09:32 12
Lisp
1
2
3
4
5
(defun minus>a (w a)
  (loop for e in w if (minusp e) collect a else collect e))
 
> (minus>a '(-1 1) 10)
(10 1)
Добавлено через 2 минуты
Lisp
1
2
3
4
5
(defun minus>a (w a)
  (mapcar #'(lambda (e) (if (minusp e) a e)) w))
 
> (minus>a '(-1 1) 10)
(10 1)
0
1 / 1 / 0
Регистрация: 24.11.2012
Сообщений: 60
08.12.2012, 09:57  [ТС] 13
надо как то сделать перебором, используя (car x), (cadr x) и (caddr x)
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
08.12.2012, 11:45 14
для списка из 3-х элементов:
Lisp
1
2
3
4
5
6
7
(defun minus>a (w a)
  (list (if (minusp (car w)) a (car w))
        (if (minusp (cadr w)) a (cadr w))
        (if (minusp (caddr w)) a (caddr w))))
 
> (minus>a '(-1 0 1) 10)
(10 0 1)
0
1 / 1 / 0
Регистрация: 24.11.2012
Сообщений: 60
11.12.2012, 20:01  [ТС] 15
а что это значит minusp? и откуда оно взялось?
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
11.12.2012, 20:04 16
Lisp
1
2
3
4
5
6
7
(defun minus>a (w a)
  (list (if (< (car w) 0) a (car w))
        (if (< (cadr w) 0) a (cadr w))
        (if (< (caddr w) 0) a (caddr w))))
 
> (minus>a '(-1 0 1) 10)
(10 0 1)
1
Заблокирован
11.12.2012, 20:06 17
Цитата Сообщение от Татьянна Посмотреть сообщение
а что это значит minusp? и откуда оно взялось?
функция, проверяющая "отрицательность" числа
(minusp -1) -> T
(minusp 0) -> nil
(minusp 2) -> nil
1
11.12.2012, 20:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2012, 20:06
Помогаю со студенческими работами здесь

Удалить из списка все отрицательные элементы
Дан список А, состоящий из записей: первое поле – вещественное число, второе – адрес следующего...

Удалить из списка все отрицательные элементы
Реализация динамических структур Написать программу, которая удаляет из списка L все...

Удалить из списка все отрицательные элементы
Добрый день, получилось создать список, но не получается сделать удаления. То есть по условию мне...

Удалить все отрицательные элементы из списка
описать процедуру,которая из списка A удаляет все отрицательные элементы


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

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