Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Замена отрицательных элементов списка на произведение соседних
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Kuroshishi Kuroshishi вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.12.2014
Question Замена отрицательных элементов списка на произведение соседних - 15.12.2014, 12:53

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

(defun task (lst &optional z)
(cond ((<= (length lst) 2) lst)
((< (car lst) 0) (cons (* z (cadr lst)) (task (cdr lst) nil)))
((< (cadr lst) 0) (cons (car lst) (cons (* (car lst) (caddr lst)) (task (cddr lst) (cadr lst)))))
(t (cons (car lst) (task (cdr lst) nil)))))

но оно не работает, если первый аргумент отрицательный. Пробовал переделать вот так:

(defun task (lst &optional (z))
(cond ((<= (length lst) 2) lst)
((< (cadr lst) 0) (cons (car lst) (cons (* (car lst) (caddr lst)) (task (cddr lst) (cadr lst)))))
(t (cons (car lst) (task (cdr lst) nil)))))

но перестаёт работать для двух рядом стоящих отрицательных элементов (считается только первый отрицательный, второй переписывается).
Так же есть такое решение:

(defun i_ch (L) (change L (car L)))
(defun change (L prev) (cond ((null (cadr L)) (cons (car L) nil)) ((< (car L) 0) (append (cons (* (cadr L) prev) nil) (change (cdr L) (car L)))) (T (cons (car L) (change (cdr L) (car L))))))

но тут та же проблема с первым отрицательным элементом. Если есть шарящие в данном языке люди, помогите.
Ответить с цитированием
Ads
Ответ

Метки
lisp , списки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
произведение элементов числового списка SWI-Prolog Vilinchik Prolog 23 05.06.2011 14:55
Определить число отрицательных элементов PUMBUS Visual Basic 1 24.05.2011 11:31
Написать функцию перестановки метами соседних четных и нечетных элементов Ajumikioto Haskell 2 06.05.2011 00:09
Замена отрицательных на абсолютные элементы дерева stayl Prolog 4 19.09.2010 20:49
В двумерном массиве среди отрицательных элементов найти сумму fightclub Assembler 5 10.01.2010 12:03
Вычислить сумму отрицательных элементов массива @ndrew Visual Basic 0 24.10.2009 13:44
Найти максимальный из положительных элементов матрицы и сумму отрицательных элементов. bessonov12 Visual Basic 1 29.04.2009 11:30
Подсчитать число и сумму положительных, число и произведение отрицательных элементов Svetik08 Visual Basic 4 19.02.2009 15:12
Сумма произведений соседних элементов Homer Simpson Pascal 1 14.09.2007 20:37
Сумма и произведение элементов списка TKN Prolog 3 11.01.2006 03:28
Найти произведение элементов списка SpLove Lisp 0 28.04.2005 23:30



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов