> 1 <

Автор Сообщение

zanzar

Members


Статус

1 сообщений

Где: Latvia
Род занятий: zanzar
Возраст:

#5570   2012-01-20 04:35 GMT+3 часа(ов)      
Пожалуйста помогите решить задачу:
Дан список из атомов и подсписков (вложенность не ограничена). Нужно удалить из списка элементы с одним значением, но противоположным знаком, чтобы остался первый из элементов.

Я пытался сделать 2 функции, одна проходит по списку, другая удаляет элементы, но запутался с рекурсией, в итоге ничего путного не вышло..

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#5578   2012-01-21 00:20 GMT+3 часа(ов)      
#5349
Удали там один из реверсов, он ищет с конца, тебе надо сначала. Это задание тоже по сути ссылается на другое задание, его надо поискать.
(defun digg2t(L)
(let ((F (make-hash-table)))
(labels ((ret (L R)
(cond
((null L) (reverse R))
((null (car L)) (ret (cdr L) (cons '() R)))
((listp (car L))
(let ((ret-car-l (ret (car L) nil)))
(if (null ret-car-l)
(ret (cdr L) R)
(ret (cdr L) (cons ret-car-l R)))))
(T (let ((x (gethash (-(car L)) F)))
(cond
((null x)
(progn
(setf (gethash (car L) F) 1)
(ret (cdr L) (cons (car L) R))))
((eq x 1)
(progn
(incf (gethash (-(car L)) F))
(ret (cdr L) R)))
(T (ret (cdr L) (cons (car L) R)))))))))
(ret L nil))))

Похоже на эту

отредактировал(а) megamanx: 2012-01-21 00:28 GMT+3 часа(ов)
I wish I'd made you angry earlier
> 1 <


Онлайн :

0 пользователь(ей), 35 гость(ей) :




Реклама на сайте: