Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 24.11.2012
Сообщений: 60
1

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

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

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

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

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

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

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

16
Каратель
Эксперт С++
6585 / 4006 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.11.2012, 21:06 2
лисп?
0
1 / 1 / 0
Регистрация: 24.11.2012
Сообщений: 60
24.11.2012, 21:08  [ТС] 3
да, лисп
0
Модератор
26246 / 13661 / 2593
Регистрация: 12.02.2012
Сообщений: 22,393
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
4324 / 4052 / 320
Регистрация: 12.05.2012
Сообщений: 2,861
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
1044 / 938 / 107
Регистрация: 04.11.2012
Сообщений: 971
Записей в блоге: 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
4324 / 4052 / 320
Регистрация: 12.05.2012
Сообщений: 2,861
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
Модератор
26246 / 13661 / 2593
Регистрация: 12.02.2012
Сообщений: 22,393
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
4324 / 4052 / 320
Регистрация: 12.05.2012
Сообщений: 2,861
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
4324 / 4052 / 320
Регистрация: 12.05.2012
Сообщений: 2,861
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
4324 / 4052 / 320
Регистрация: 12.05.2012
Сообщений: 2,861
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2012, 20:06

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

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

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

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

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


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

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

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